如何展平第二轴上具有不同长度的2d numpy数组?

发布于 2021-01-29 14:58:45

我有一个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])吗?

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    myArray是一维 对象
    数组。您的列表对象将仅使用flatten()或保持相同顺序ravel()。您可以用来hstack按水平顺序堆叠数组:

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

    请注意,这基本上等效于使用concatenate1的轴(
    这在直觉上应该有意义 ):

    >>> 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的答案还为您提供了有关为何无法使用flatten()ravel()指定数组类型的更多信息。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看