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

Python np.array ndmin参数:指定添加维度的位置,python,arrays,numpy,Python,Arrays,Numpy,我有一个M维的np.ndarray,其中M我会使用。重塑 >>> 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]

我有一个M维的
np.ndarray
,其中
M我会使用
。重塑

>>> 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)
刚定

 a5d = np.array(a3d)
 a5d.shape = a3d.shape + (1, 1)
 print a5d.shape

 (2, 3, 4, 1, 1)

由于阵列具有相同的物理大小

这种方法的问题是,我原来的阵列可能已经是5维的。如果形状已经是
(2,3,4,5,6)
,这将不起作用。第二部分很好,聪明!填充到某个维度正是本文的目标,因此第一部分在这种特殊情况下不起作用。@Joe--您也可以将我的答案与Gadi的--
a3d.shape=padded\u shape
,尽管我不确定您是否真的从中获益太多。我通常是这样做的(1,)*(ndim-a3d.ndim)
,但最终结果是一样的。@Jaime——是的。那可能更优雅一点。我只是不想去想:-)
 a5d = np.array(a3d)
 a5d.shape = a3d.shape + (1, 1)
 print a5d.shape

 (2, 3, 4, 1, 1)