np.array ndmin 参数:指定添加维度的位置

Joe*_*Joe 2 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
Run Code Online (Sandbox Code Playgroud)

有没有办法指定添加的维度应该放在哪里?我可以在这里使用替代函数来产生我想要的输出吗?

显然,在上面的示例中,我可以在事后操作数组,以按照我想要的顺序放置轴,但由于原始数组可能具有 0 到 5 维的任何位置(并且我希望将原始维度保持在原始顺序) ,如果不对原始形状进行一系列繁琐的检查,我想不出一种方法可以做到这一点。

mgi*_*son 5

我会用.reshape...

>>> a3d = a3d.reshape(a3d.shape + (1, 1))
>>> a3d.shape
(2, 3, 4, 1, 1)
Run Code Online (Sandbox Code Playgroud)

如果你想填充到一定的维度:

>>> 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)
Run Code Online (Sandbox Code Playgroud)