2016-11-04 213 views
3

我有一個數組,我想要分割int矩陣(10x10)。經過幾次嘗試後,我做到了這一點。numpy數組爲三角形(矩陣)

a=np.arange(1,56) 
tri = np.zeros((10, 10)) 
tri[np.triu_indices_from(tri,0)]=a 
tri 

array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.], 
     [ 0., 11., 12., 13., 14., 15., 16., 17., 18., 19.], 
     [ 0., 0., 20., 21., 22., 23., 24., 25., 26., 27.], 
     [ 0., 0., 0., 28., 29., 30., 31., 32., 33., 34.], 
     [ 0., 0., 0., 0., 35., 36., 37., 38., 39., 40.], 
     [ 0., 0., 0., 0., 0., 41., 42., 43., 44., 45.], 
     [ 0., 0., 0., 0., 0., 0., 46., 47., 48., 49.], 
     [ 0., 0., 0., 0., 0., 0., 0., 50., 51., 52.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 53., 54.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 55.]]) 

,結果我想:

array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.], 
     [ 11., 12., 13., 14., 15., 16., 17., 18., 19., 0.], 
     [ 20., 21., 22., 23., 24., 25., 26., 27., 0., 0.], 
     [ 28., 29., 30., 31., 32., 33., 34., 0., 0., 0.], 
     [ 35., 36., 37., 38., 39., 40., 0., 0., 0., 0.], 
     [ 41., 42., 43., 44., 45., 0., 0., 0., 0., 0.], 
     [ 46., 47., 48., 49., 0., 0., 0., 0., 0., 0.], 
     [ 50., 51., 52., 0., 0., 0., 0., 0., 0., 0.], 
     [ 53., 54., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 55., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 

我不喜歡try.T,np.triu,np.tril ...等幾個關係。

感謝

+0

使用負值步進索引應該可以做到這一點,'tri [:,:: - 1]'。 – hpaulj

+0

輸入總是上三角矩陣嗎? – Divakar

回答

2

如果這是你的意思,則可以使用rot90()方法通過90度旋轉上三角索引矩陣,然後用它作爲索引來填充所述陣列中的值:

import numpy as np 
a=np.arange(1,56) 
tri = np.zeros((10, 10)) 
tri[np.rot90(np.triu(np.ones((10,10), dtype=bool)))] = a 

tri 
# array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.], 
#  [ 11., 12., 13., 14., 15., 16., 17., 18., 19., 0.], 
#  [ 20., 21., 22., 23., 24., 25., 26., 27., 0., 0.], 
#  [ 28., 29., 30., 31., 32., 33., 34., 0., 0., 0.], 
#  [ 35., 36., 37., 38., 39., 40., 0., 0., 0., 0.], 
#  [ 41., 42., 43., 44., 45., 0., 0., 0., 0., 0.], 
#  [ 46., 47., 48., 49., 0., 0., 0., 0., 0., 0.], 
#  [ 50., 51., 52., 0., 0., 0., 0., 0., 0., 0.], 
#  [ 53., 54., 0., 0., 0., 0., 0., 0., 0., 0.], 
#  [ 55., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 
+0

這項工作就像一個魅力!謝謝 – enden