Python NumPy连接对角线上方/下方的2个三角形阵列

时间:2016-12-06 04:15:22

标签: python arrays numpy concatenation diagonal

我正在尝试将2个三角形NumPy数组合并到Python中的新数组中。每个三角形阵列都填充了一半的值,对角线上有零。我需要将这两个数组合并为一个新的组合数组,对角线为零。

这是数组X

import numpy as np
X = np.random.rand(4,4)

[[ 0.06681579  0.25793063  0.86489791  0.78399056]
 [ 0.7335036   0.99703778  0.40017913  0.07912444]
 [ 0.43533884  0.51517525  0.28110527  0.10793738]
 [ 0.19212844  0.704657    0.94657795  0.89042305]]

然后我提取lower 以及数组中upper对角线值的修改版本:

u = np.triu(X+1,k=1)
l = np.tril(X,k=-1)
print u
[[ 0.          1.25793063  1.86489791  1.78399056]
 [ 0.          0.          1.40017913  1.07912444]
 [ 0.          0.          0.          1.10793738]
 [ 0.          0.          0.          0.        ]]

print l
[[ 0.          0.          0.          0.        ]
 [ 0.7335036   0.          0.          0.        ]
 [ 0.43533884  0.51517525  0.          0.        ]
 [ 0.19212844  0.704657    0.94657795  0.        ]]

现在,我需要将这两个数组ul组合在一起,以便:

  1. 上三角形(不包括对角线)填充u
  2. 下三角(不包括对角线)填充l
  3. 对角线仍然用零填充
  4. 以下是我要找的内容:

    [[ 0.          1.25793063  1.86489791  1.78399056]
     [ 0.7335036   0.          1.40017913  1.07912444]
     [ 0.43533884  0.51517525  0.          1.10793738]
     [ 0.19212844  0.704657    0.94657795  0.        ]]
    

    有没有办法连接这两个NumPy数组来获得这个输出?

1 个答案:

答案 0 :(得分:4)

u+l

这应该足以满足大多数情况。如果你需要注意保留带符号的零,你可以做一些更麻烦的事情:

result = u.copy()
l_indices = numpy.tril_indices_from(l)
result[l_indices] = l[l_indices]