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