将numpy数组转换为三角形(矩阵)

3

我有一个数组,想将其分成一个矩阵(10x10)。 经过多次尝试,我做到了这一点。

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

and the result I wish:

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等。

谢谢。


使用负步长进行索引处理,tri[:,::-1] - hpaulj
输入是否总是一个上三角矩阵? - Divakar
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接