python – 如何展平一个2d numpy数组,它在第二个轴上有不同的长度?

我有一个numpy数组,看起来像:

myArray = np.array([[1,2],[3]])

但我无法压扁它,

In: myArray.flatten()
Out: array([[1, 2], [3]], dtype=object)

如果我在第二轴上将数组更改为相同的长度,那么我可以将其展平.

In: myArray2 = np.array([[1,2],[3,4]])
In: myArray2.flatten()
Out: array([1, 2, 3, 4])

我的问题是:

我可以使用像myArray.flatten()这样的东西,无论数组的大小和元素的长度如何,并获得输出:array([1,2,3])?

最佳答案
myArray是一维对象数组.您的列表对象将与flatten()或ravel()保持相同的顺序.您可以使用hstack水平顺序堆叠数组:

>>> np.hstack(myArray)
array([1, 2, 3])

请注意,这基本上等同于使用轴为1的concatenate(这应该是直观的):

>>> np.concatenate(myArray, axis=1)
array([1, 2, 3])

但是,如果您没有此问题并且可以合并项目,则始终最好使用flatten()或ravel()来提高性能:

In [1]: u = timeit.Timer('np.hstack(np.array([[1,2],[3,4]]))'\
   ....: , setup = 'import numpy as np')
In [2]: print u.timeit()
11.0124390125

In [3]: u = timeit.Timer('np.array([[1,2],[3,4]]).flatten()'\
   ....: , setup = 'import numpy as np')
In [4]: print u.timeit()
3.05757689476

Iluengo’s answer还为您提供了有关为什么不能在给定数组类型时使用flatten()或ravel()的更多信息.

转载注明原文:python – 如何展平一个2d numpy数组,它在第二个轴上有不同的长度? - 代码日志