Python 用中位数沿特定轴填充三维numpy数组

Python 用中位数沿特定轴填充三维numpy数组,python,arrays,numpy,padding,Python,Arrays,Numpy,Padding,假设我有以下numpy数组arr: [[0] [ 1 10] [ 2 20]] [[ 3 30] [ 4 40] [ 5 50]] [[ 6 60] [ 7 70] [ 8 80]] [[ 9 90] [ 10 100] [ 11 110]] [[ 12 120] [ 13 130] [ 14 140]]] 形状(5,3,2) 现在,注意arr的以下尺寸: 第一个'arr[:,:,0] [[0 1 2] [ 3 4 5] [ 6 7 8] [ 9 1

假设我有以下numpy数组arr:

[[0]
[  1  10]
[  2  20]]
[[  3  30]
[  4  40]
[  5  50]]
[[  6  60]
[  7  70]
[  8  80]]
[[  9  90]
[ 10 100]
[ 11 110]]
[[ 12 120]
[ 13 130]
[ 14 140]]]
形状
(5,3,2)

现在,注意arr的以下尺寸:

第一个'arr[:,:,0]

[[0 1 2]
[ 3  4  5]
[ 6  7  8]
[ 9 10 11]
[12 13 14]]
中位数
7

和'arr[:,:,1]

[[0 10 20]
[ 30  40  50]
[ 60  70  80]
[ 90 100 110]
[120 130 140]]
中位数为70

我想在
arr
的第一个轴上加上上面的一对中间点(可以计算为
np.median(a.reformate(-1,a.shape[-1]),axis=0)
),这样,对于一些k>5,结果具有shape
(k,3,2)
,并且填充为以下内容(例如
k=2
,以及最终形状
(7,3,2)

[[0]
[  1  10]
[  2  20]]
[[  3  30]
[  4  40]
[  5  50]]
[[  6  60]
[  7  70]
[  8  80]]
[[  9  90]
[ 10 100]
[ 11 110]]
[[ 12 120]
[ 13 130]
[ 14 140]]
[[ 7 70]
[ 7 70]
[ 7 70]]
[[ 7 70]
[ 7 70]
[ 7 70]]]
请注意,我不能使用
numpy.pad
mode='median'
参数,因为它没有选择只考虑阵列的一个轴并展平其他轴来计算中位数(如果我固定某个轴,它将始终跨其他轴计算单个中位数)

问题是,在numpy 2.16中,我曾经能够以一种非常简单的方式实现这一点:

md=np.中位数(a.重塑(-1,a.形状[-1]),轴=0)
arp=np.pad(a,((0,k),(0,0),(0,0)),mode='constant',constant_值=(0,md))
但是numpy 2.19中出现了相同的代码中断,错误如下:

ValueError: could not broadcast input array from shape (2) into shape (7,3,0)
使用
numpy.pad
,我尝试了大量的输入变体,但运气不好。这真的让我发疯了,在这一点上,我几乎只是在叠加中间数组的重复。但是我真的很想知道,在numpy 2.19中使用
numpy.pad

是否有可能解决这个问题:

#(可复制设置)
a=np.arange(15)。重塑(5,3,1)
a=np.连接((a,a*10),轴=-1)
#沿轴0,1的中线
md=np.中值(a,轴=(0,1))
#用中位数“填充”
k=2
b=np.vstack((a,np.tile(md,(k,a.shape[1],1)))
>b
数组([[0,0.],
[  1.,  10.],
[  2.,  20.]],
[[  3.,  30.],
[  4.,  40.],
[  5.,  50.]],
[[  6.,  60.],
[  7.,  70.],
[  8.,  80.]],
[[  9.,  90.],
[ 10., 100.],
[ 11., 110.]],
[[ 12., 120.],
[ 13., 130.],
[ 14., 140.]],
[[  7.,  70.],
[  7.,  70.],
[  7.,  70.]],
[[  7.,  70.],
[  7.,  70.],
[  7.,  70.]]])
编辑:如果要使用
键盘
,也可以执行以下操作:

b=np.pad(
a、 重塑((-1,2)),
((0,k*a.shape[1]),(0,0)),
模式=中间值',
).重塑(np.添加(a.形状,(k,0,0)))

这让你可以使用你一直在寻找的
mode='media'
,这种方式对
pad()来说是很自然的,这确实有效,但这并不完全是我想要的,因为我想知道在numpy 2.19中使用
numpy.pad
是否有可能解决这个问题(因为我实际上是在numpy 2.16中解决的)尽管如此,我仍在向上投票,因为我忽略了一个事实,即可以计算轴列表旁边的中位数,如
md=np。中位数(a,轴=(0,1))
,这是非常有趣的信息!好的,请参阅附录使用pad。