2012-01-29 39 views
17

tôi có:cách chính xác và hiệu quả để làm phẳng mảng trong numpy trong python?

a = array([[1,2,3],[4,5,6]]) 

và tôi muốn san bằng nó, tham gia vào hai danh sách bên trong vào một mục nhập mảng phẳng. Tôi có thể làm:

array(list(flatten(a))) 

nhưng điều đó dường như không hiệu quả do các diễn viên danh sách (Tôi muốn kết thúc với một mảng và không phải là một máy phát điện.)

Ngoài ra, cách này có thể được khái quát hóa thành một mảng như này:

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

hiển thị kết quả nên là:

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

đang có BUILTIN/numPy hiệu quả/sc ipy nhà khai thác cho điều này? cảm ơn.

Trả lời

11

Bạn có thể sử dụng 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]]) 
+0

Tôi nghĩ rằng nó nên được 'a.reshape ([2,6])', cảm ơn! – user248237dfsf

+0

@ user248237: uh, xin lỗi, tôi đã đọc sai câu hỏi của bạn, đó vẫn là phương pháp bạn phải sử dụng. Đã sửa lỗi. :) –

+4

định hình lại() là một phương pháp tốt. –

8

Làm thế nào về:

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

+1 cho flatten() - nó cũng có thể làm cho Fortran/cột-san phẳng. định hình lại (-1) cũng sẽ làm phẳng. –

15

Bạn có thể cần phải kiểm tra numpy.flattennumpy.ravel, cả hai trả về một mảng 1-d từ một mảng n-d.

Hơn nữa, nếu bạn không sửa đổi mảng 1-d được trả về, tôi khuyên bạn nên sử dụng numpy.ravel, vì nó không tạo bản sao của mảng, nhưng chỉ trả lại chế độ xem của mảng, nhanh hơn nhiều so với 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 

Ngoài ra, hãy xem post này.

-1
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 

Tôi tự hỏi Reshape nên dành thời gian đến nay ít hơn nhưng hầu như tương tự của nó

Các vấn đề liên quan