2015-11-03 26 views
7

Eşit sayıda sütun ve satır içeren 2 boyutlu bir numpy dizilim var. Onları diyagonalde daha küçük olanlara sahip daha büyük bir diziye yerleştirmek istiyorum. Başlangıç ​​matrisinin diyagonalde ne sıklıkta olması gerektiğini belirtmek mümkün olmalıdır. Örneğin: Bu dizi istiyorsa YaniBelirli bir sayı dizisinden blok diyagonal numpy dizisi oluşturma

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

diyagonal istedikleri çıktıya 2 kez olacaktır:

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

3 için kat:

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

hızlı yolu var mı numpy yöntemleriyle ve başlangıç ​​dizisinin keyfi büyüklükleriyle (aynı sayıda satır ve sütun sayısına sahip başlangıç ​​dizisini dikkate alarak) uygulamak için? numpy.kron ait

cevap

11

Klasik vaka -

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

Numune çalışma - Eğer diyagonal içine x farklı matrisler yerleştirmeniz gerekiyorsa

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

Bunu nasıl yapardın? Bir blok diyagonal matrisinde yapılması gereken 80 farklı matrisim var. –

+0

@ Will.Evo Aynı şekillerin tümü 80 mi? – Divakar

+0

Evet tüm aynı şekil –

İlgili konular