numpy数组为三角形(矩阵)

问题描述:

我有一个数组,我想要分割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

如果这是你的意思,则可以使用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