Python 为多维数组添加虚拟维度

Python 为多维数组添加虚拟维度,python,numpy,scipy,Python,Numpy,Scipy,有一个nd数组a,其形状[100255255,3],对应于100255*255个图像。我想迭代这个多维数组,每次迭代我得到一个图像。这就是我所做的,A1=A[I,:,:,::]结果A1具有形状[255255,3]。但是,我想强制它具有形状[1255255,3]。我怎么做 np.reshape(A1, (1, 255, 255, 3)) 应该在生成的数组上使用np.newaxis来完成此操作 二维阵列上非常简单的示例: x = np.array([[0, 1], [2, 3]]) x.shape

有一个nd数组
a
,其形状
[100255255,3]
,对应于100255*255个图像。我想迭代这个多维数组,每次迭代我得到一个图像。这就是我所做的,
A1=A[I,:,:,::]
结果
A1
具有形状
[255255,3]
。但是,我想强制它具有形状
[1255255,3]
。我怎么做

np.reshape(A1, (1, 255, 255, 3))

应该在生成的数组上使用
np.newaxis
来完成此操作

二维阵列上非常简单的示例:

x = np.array([[0, 1], [2, 3]])
x.shape
#: (2, 2)
x[np.newaxis]
#: array([[[0, 1],
#:         [2, 3]]])
x[np.newaxis].shape
#: (1, 2, 2)

当然,没问题。使用“重塑”。假设A1是一个numpy数组

A1=A1.重塑([1255255,3])

这将重塑你的矩阵

如果A1不是numpy数组,则使用


A1=numpy.array(A1)。重塑([1255255,3])

答案是。。。这里是一个例子,请注意,您必须仔细查看括号,以区分a和b是否因尺寸不同而不同

>>> a = np.arange(2*2*2*2).reshape(2,2,2,2)
>>> a.ndim
4
>>> b = a.reshape((1,)+a.shape)
>>> b.ndim
5
>>> a
array([[[[ 0,  1],
         [ 2,  3]],

        [[ 4,  5],
         [ 6,  7]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])
>>> b
array([[[[[ 0,  1],
          [ 2,  3]],

         [[ 4,  5],
          [ 6,  7]]],


        [[[ 8,  9],
          [10, 11]],

         [[12, 13],
          [14, 15]]]]])
如果使用:

for a in A: # iteration on the first dimension
   a = a[None,...]   # add the dim back
   # or a.reshape(...)
但是如果使用

for i in range(A.shape[0]):
    a = A[[i]]    # preserve the 1st dim
    # or a = A[None,i,...]
但我喜欢使用
枚举
,因此:

for i, a in enumerate(A):
    a = a[None,...]   
但我鼓励你想想为什么你需要最初的一维空间。也许您甚至不需要迭代?

可能重复