tôi sẽ đề nghị các ravel
hoặc flatten
phương pháp ndarray
.
>>> a = numpy.arange(9).reshape(3, 3)
>>> a.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
ravel
nhanh hơn concatenate
và flatten
bởi vì nó không trả về một bản sao trừ khi nó phải:
>>> a.ravel()[5] = 99
>>> a
array([[ 0, 1, 2],
[ 3, 4, 99],
[ 6, 7, 8]])
>>> a.flatten()[5] = 77
>>> a
array([[ 0, 1, 2],
[ 3, 4, 99],
[ 6, 7, 8]])
Nhưng nếu bạn cần một bản sao để tránh bộ nhớ chia sẻ được minh họa ở trên, bạn' tái nên sử dụng flatten
hơn concatenate
, như bạn có thể nhìn thấy từ những timings:
>>> %timeit a.ravel()
1000000 loops, best of 3: 468 ns per loop
>>> %timeit a.flatten()
1000000 loops, best of 3: 1.42 us per loop
>>> %timeit numpy.concatenate(a)
100000 loops, best of 3: 2.26 us per loop
N ote cũng là bạn có thể đạt được chính xác kết quả là đầu ra của bạn minh họa (một hàng 2-d mảng) với reshape
:
>>> a = numpy.arange(9).reshape(3, 3)
>>> a.reshape(1, -1)
array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
>>> %timeit a.reshape(1, -1)
1000000 loops, best of 3: 736 ns per loop
@senderle - Ravel là bản năng đầu tiên của tôi quá (nhờ Pierre GM!) . Đăng như một câu trả lời và tôi sẽ vui vẻ upvote. – mgilson