如何在不在NumPy中复制的情况下展平多维数组的轴?

Ale*_*tti 11 python indexing numpy multidimensional-array

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

sen*_*rle 12

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

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

在大多数情况下,这些都返回原始数组的视图,而不是副本.


aar*_*ren 7

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

images.reshape((images.shape[0], -1))
Run Code Online (Sandbox Code Playgroud)

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