np.array ndmin参数:指定添加尺寸的位置

时间:2015-02-20 19:46:10

标签: python arrays numpy

我有一个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维的任何位置(我想保留原始尺寸)原始订单),如果没有对原始形状进行繁琐的系列检查,我想不出办法做到这一点。

2 个答案:

答案 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)

因为阵列具有相同的物理尺寸