2015-11-03 14 views
7

Tôi có một mảng numpy 2 chiều với số cột và hàng bằng nhau. Tôi muốn sắp xếp chúng thành một mảng lớn hơn có những cái nhỏ hơn trên đường chéo. Có thể chỉ định tần suất ma trận bắt đầu phải nằm trên đường chéo. Ví dụ:Tạo mảng numpy khối chéo từ một mảng sumpy nhất định

a = numpy.array([[5, 7], 
       [6, 3]]) 

Vì vậy, nếu tôi muốn mảng này 2 lần trên đường chéo đầu ra mong muốn sẽ là:

array([[5, 7, 0, 0], 
     [6, 3, 0, 0], 
     [0, 0, 5, 7], 
     [0, 0, 6, 3]]) 

cho 3 lần:

array([[5, 7, 0, 0, 0, 0], 
     [6, 3, 0, 0, 0, 0], 
     [0, 0, 5, 7, 0, 0], 
     [0, 0, 6, 3, 0, 0], 
     [0, 0, 0, 0, 5, 7], 
     [0, 0, 0, 0, 6, 3]]) 

Có một cách nhanh chóng để thực hiện điều này với các phương thức gumpy và cho các kích thước tùy ý của mảng bắt đầu (vẫn xem xét mảng bắt đầu có cùng số hàng và cột)?

Trả lời

11

trường hợp cổ điển của numpy.kron -

np.kron(np.eye(n), a) 

mẫu chạy -

In [57]: n = 2 

In [58]: np.kron(np.eye(n), a) 
Out[58]: 
array([[ 5., 7., 0., 0.], 
     [ 6., 3., 0., 0.], 
     [ 0., 0., 5., 7.], 
     [ 0., 0., 6., 3.]]) 

In [59]: n = 3 

In [60]: np.kron(np.eye(n), a) 
Out[60]: 
array([[ 5., 7., 0., 0., 0., 0.], 
     [ 6., 3., 0., 0., 0., 0.], 
     [ 0., 0., 5., 7., 0., 0.], 
     [ 0., 0., 6., 3., 0., 0.], 
     [ 0., 0., 0., 0., 5., 7.], 
     [ 0., 0., 0., 0., 6., 3.]]) 
+0

Làm thế nào bạn sẽ làm điều này nếu bạn cần để chèn x ma trận khác nhau vào các đường chéo? Tôi có 80 ma trận khác nhau, cần được tạo thành ma trận đường chéo khối. –

+0

@ Will.Evo Tất cả 80 hình dạng giống nhau? – Divakar

+0

Có tất cả cùng một hình dạng –

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