在python中用numpy展平数组的正确有效方法?

在python中用numpy展平数组的正确有效方法?,python,numpy,scipy,Python,Numpy,Scipy,我有: 我想将它展平,将两个内部列表合并到一个平面数组条目中。我可以做到: a = array([[1,2,3],[4,5,6]]) 但由于列表转换(我希望最终得到的是一个数组,而不是一个生成器),这似乎效率低下 另外,如何将其推广到这样的数组: array(list(flatten(a))) 结果应为: b = array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]]) 是否有内置/高效的numpy/scipy运算符?谢谢。您可以使用 那么:

我有:

我想将它展平,将两个内部列表合并到一个平面数组条目中。我可以做到:

a = array([[1,2,3],[4,5,6]])
但由于列表转换(我希望最终得到的是一个数组,而不是一个生成器),这似乎效率低下

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

array(list(flatten(a)))
结果应为:

b = array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]])
是否有内置/高效的numpy/scipy运算符?谢谢。

您可以使用

那么:

>>> 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]])


您可能需要签出
numpy.flatte
numpy.ravel
,这两种方法都从n-d数组返回一个一维数组

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

>>> 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]])
也看看这个


我不知道重塑应该花费更少的时间,但它几乎是相似的

我认为它应该是
a.reforme([2,6])
,谢谢@user248237:呃,对不起,我误解了你的问题,仍然是你必须使用的方法。现已修复。:)整形()是一个很好的方法。如果你像我一样懒惰,你可以做
b.整形([2,-1])
+1 for flatten()--它也可以做Fortran/列主展平。重塑(-1)也会变平。我必须查一下:micro=10^-6,nano=10^-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])
>>> 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]])
>>>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
a = np.arange(10000)

%timeit a.reshape(100,100)
1000000 loops, best of 3: 517 ns per loop

%timeit a.resize(100,100)
1000000 loops, best of 3: 428 ns per loop