2012-12-21 43 views
22

Tôi có một ma trận 3d như thế này3d mảng NumPy để 2ngày

arange(16).reshape((4,2,2)) 
array([[[ 0, 1], 
     [ 2, 3]], 

     [[ 4, 5], 
     [ 6, 7]], 

     [[ 8, 9], 
     [10, 11]], 

     [[12, 13], 
     [14, 15]]]) 

và muốn ngăn xếp chúng ở định dạng lưới, kết thúc với

array([[ 0, 1, 4, 5], 
     [ 2, 3, 6, 7], 
     [ 8, 9, 12, 13], 
     [10, 11, 14, 15]]) 

Có cách nào làm mà không rõ ràng hstacking (và/hoặc vstacking) chúng hoặc thêm một chiều hướng thêm và định hình lại (không chắc chắn điều này sẽ làm việc)?

Cảm ơn,

+0

Hiển thị mã cho chúng tôi. – tostao

Trả lời

35
In [27]: x = np.arange(16).reshape((4,2,2)) 

In [28]: x.reshape(2,2,2,2).swapaxes(1,2).reshape(4,-1) 
Out[28]: 
array([[ 0, 1, 4, 5], 
     [ 2, 3, 6, 7], 
     [ 8, 9, 12, 13], 
     [10, 11, 14, 15]]) 

tôi đã đăng các chức năng tổng quát hơn cho reshaping/unshaping arrays into blocks, here.

+15

Ngạc nhiên trước sự thành thạo của NumPy. :) – EOL

+0

Ok, do đó, xem xét tôi có ma trận khối N với kích thước 'bm x bn' và muốn xếp chúng trong một ma trận' mxn', cung cấp 'N = mxn', tôi sẽ có ' x.reshape (m, n, bm, bn) .swapaxes (1,2) .reshape (bm * m, -1) ' Chỉ muốn biết nếu có bất kỳ chức năng numpy nào cho mục đích này. Cảm ơn @unutbu một lần nữa. – poeticcapybara

+1

@EOL: Cảm ơn bạn, EOL, mặc dù nếu bạn thấy [những gì diễn ra đằng sau hậu trường] (http://www.youtube.com/watch?v=sY_Yf4zz-yo), nó không quá đẹp :) – unutbu

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