我有一个M维np.ndarray
,其中M <= N
。超出这个条件,阵列可以具有任何形状。我想将此数组转换为N维,维度0到M保持不变,维度M到N设置为1.
我几乎可以通过使用np.array
复制数组并提供ndmin
参数来实现此行为。但是,这会将额外的轴置于“第一”而非“最后”位置:
>>> a3d = np.zeros((2,3,4))
>>> a5d = np.array(a3d, ndmin = 5)
>>> a5d.shape
(1, 1, 2, 3, 4) #actual shape
(2, 3, 4, 1, 1) #desired shape
有没有办法指定添加的尺寸应该去哪里?我可以在这里使用的替代功能可以产生我想要的输出吗?
显然在上面的例子中我可以操作数组,然后按照我想要的顺序放置轴,但是因为orignal数组可能有0到5维的任何位置(我想保留原始尺寸)原始订单),如果没有对原始形状进行繁琐的系列检查,我想不出办法做到这一点。
答案 0 :(得分:3)
我使用.reshape
...
>>> a3d = a3d.reshape(a3d.shape + (1, 1))
>>> a3d.shape
(2, 3, 4, 1, 1)
如果你想填补某个维度:
>>> a3d = np.zeros((2,3,4))
>>> ndim = 5
>>> padded_shape = (a3d.shape + (1,)*ndim)[:ndim]
>>> new_a3d = a3d.reshape(padded_shape)
>>> new_a3d.shape
(2, 3, 4, 1, 1)
答案 1 :(得分:1)
只需设置
a5d = np.array(a3d)
a5d.shape = a3d.shape + (1, 1)
print a5d.shape
(2, 3, 4, 1, 1)
因为阵列具有相同的物理尺寸