我有:
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]]])
结果应该是:
b = array([[1,2,3,4,5,6],
[10,11,12,13,14,15]])
有内置/高效的numpy / scipy运营商吗?感谢。
答案 0 :(得分:27)
您可能需要查看numpy.flatten
和numpy.ravel
,它们都会从n-d数组中返回1-d数组。
此外,如果你不打算修改返回的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
另请查看此post。
答案 1 :(得分:17)
您可以使用reshape
method。
>>> 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]])
答案 2 :(得分: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]])
答案 3 :(得分:-2)
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
我不知道重塑应该花费的时间少得多,但几乎相似