【问题标题】:How to flatten axes of a multidimensional array without making copies in NumPy?如何在不使用 NumPy 复制的情况下展平多维数组的轴?
【发布时间】:2012-04-20 13:41:16
【问题描述】:

我想知道是否有一种方法可以沿给定轴展平多维数组(即 ndarray 类型),而无需在 NumPy 中复制。例如,我有一个二维图像数组,我希望将每个图像展平为一个向量。因此,一种简单的方法是numpy.array([im.flatten() for im in images]),但这会创建每个副本。

【问题讨论】:

    标签: python multidimensional-array numpy indexing


    【解决方案1】:

    ravel它:

    >>> a = numpy.arange(25).reshape((5, 5))
    >>> b = a.ravel()
    >>> b[0] = 55
    >>> a
    array([[55,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19],
           [20, 21, 22, 23, 24]])
    

    或者reshape它:

    >>> a = numpy.arange(27).reshape((3, 3, 3))
    >>> b = a.reshape((9, 3))
    >>> b[0] = 55
    >>> a
    array([[[55, 55, 55],
            [ 3,  4,  5],
            [ 6,  7,  8]],
    
           [[ 9, 10, 11],
            [12, 13, 14],
            [15, 16, 17]],
    
           [[18, 19, 20],
            [21, 22, 23],
            [24, 25, 26]]])
    

    在大多数情况下,它们都返回原始数组的视图,而不是副本。

    【讨论】:

    • 谢谢! reshape 为我做了诀窍。我之前认为它会破坏我的二维矩阵和向量之间的一对一映射。但不,它奏效了!
    【解决方案2】:

    如果您不知道输入数组的形状:

    images.reshape((images.shape[0], -1))
    

    -1 告诉 reshape 计算剩余的尺寸。这假设您 想要展平图像的第一个轴。

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 2020-05-02
      • 2015-05-28
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2015-10-07
      相关资源
      最近更新 更多