正确有效的方法在python中压缩numpy中的数组?

26 python numpy scipy

我有:

a = array([[1,2,3],[4,5,6]])
Run Code Online (Sandbox Code Playgroud)

我想把它弄平,将两个内部列表连接成一个平面数组条目.我可以:

array(list(flatten(a)))
Run Code Online (Sandbox Code Playgroud)

但由于列表转换,这似乎效率低下(我希望最终得到一个数组,而不是一个生成器.)

另外,如何将它推广到这样的数组:

b = array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]])
Run Code Online (Sandbox Code Playgroud)

结果应该是:

b = array([[1,2,3,4,5,6],
           [10,11,12,13,14,15]])
Run Code Online (Sandbox Code Playgroud)

有没有内置/高效的numpy/scipy运营商?谢谢.

Alc*_*ott 29

您可能需要签出,numpy.flatten并从numpy.ravel两个数组返回一维数组.

此外,如果您不打算修改返回的1-d数组,我建议您使用numpy.ravel,因为它不会复制数组,而只返回数组的视图,这比它快得多numpy.flatten.

>>>a = np.arange(10000).reshape((100,100))

>>>%timeit a.flatten()
100000 loops, best of 3: 4.02 µs per loop

>>>%timeit a.ravel()
1000000 loops, best of 3: 412 ns per loop
Run Code Online (Sandbox Code Playgroud)

还看看这篇文章.

  • 我不得不查一查:微= 10 ^ -6,纳米= 10 ^ -9 (5认同)

Mat*_*lia 19

您可以使用该reshape方法.

>>> import numpy
>>> b = numpy.array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]])
>>> b.reshape([2, 6])
array([[ 1,  2,  3,  4,  5,  6],
       [10, 11, 12, 13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)

  • 如果你像我一样懒,你可以做'b.reshape([2,-1])` (5认同)
  • reshape()是一个很好的方法. (4认同)

Mar*_*nen 9

怎么样:

>>> import numpy as np
>>> a=np.arange(1,7).reshape((2,3))
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.flatten()
array([1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

>>> import numpy as np
>>> b=np.arange(1,13).reshape((2,2,3))
>>> b
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
>>> b.reshape((2,6))
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])
Run Code Online (Sandbox Code Playgroud)