2015-11-03 20 views
7

Mam dwuwymiarową tablicę numpy z równą liczbą kolumn i wierszy. Chciałbym rozmieścić je w większym układzie, z mniejszymi na przekątnej. Powinno być możliwe określenie, jak często macierz początkowa powinna znajdować się na przekątnej. Na przykład:Tworzenie przekątnej tablic numty z danej tablicy numpy

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

Więc gdybym chciał tej tablicy 2 razy na przekątnej pożądanym wyjściem byłoby:

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

3 razy:

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

Czy istnieje szybki sposób zaimplementować to za pomocą metod numpy i dla dowolnych rozmiarów tablicy początkowej (nadal biorąc pod uwagę, że tablica początkowa ma taką samą liczbę wierszy i kolumn)?

Odpowiedz

11

klasyczny przypadek numpy.kron -

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

Sample Run -

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

Jak można to zrobić, jeśli trzeba wstawić x różne matryce do przekątnej? Mam 80 różnych matryc, które muszą być wykonane w macierzy przekątnej blokowej. –

+0

@ Will.Evo Wszystkie 80 o tych samych kształtach? – Divakar

+0

Tak wszystkie w tym samym kształcie –

Powiązane problemy