【问题标题】:add a dummy dimension for a multi-dimensional array为多维数组添加一个虚拟维度
【发布时间】:2016-10-25 03:56:25
【问题描述】:

有一个数组A,形状为[100,255,255,3],对应100张255*255的图片。我想迭代这个多维数组,每次迭代我都会得到一个图像。这就是我所做的,A1 = A[i,:,:,:] 生成的A1 的形状为[255,255,3]。但是,我想强制它具有[1,255,255,3] 的形状。我该怎么做?

【问题讨论】:

标签: python numpy scipy


【解决方案1】:
np.reshape(A1, (1, 255, 255, 3))

应该做的伎俩

【讨论】:

    【解决方案2】:

    在结果数组上使用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)
    

    【讨论】:

      【解决方案3】:

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

      A1 = A1.reshape([1,255,255,3])

      这将重塑您的矩阵。

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

      A1 = numpy.array(A1).reshape([1,255,255,3])

      【讨论】:

        【解决方案4】:

        答案已经出来了......这里是一个例子,注意你必须仔细看括号来辨别 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]]]]])
        

        【讨论】:

          【解决方案5】:

          如果使用:

          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,...]
          

          但我喜欢使用enumerate 所以:

          for i, a in enumerate(A):
              a = a[None,...]   
          

          但我建议您考虑一下为什么需要最初的 1 维。也许你甚至不需要迭代?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-22
            • 1970-01-01
            • 1970-01-01
            • 2018-09-20
            • 1970-01-01
            相关资源
            最近更新 更多