我有一个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


有没有办法指定添加尺寸的位置?我在这里可以使用其他功能来产生所需的输出吗?

显然,在上面的示例中,我可以在事后操纵数组以将轴按所需的顺序放置,但是由于原始数组的尺寸可能在0到5之间(我想将原始尺寸保持在原始顺序) ,如果不对原始形状进行一系列乏味的检查,我想不出一种方法。

最佳答案

我会用.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)

09-19 14:57