我正在尝试将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. ]]
现在,我需要将这两个数组u
和l
组合在一起,以便:
u
l
以下是我要找的内容:
[[ 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数组来获得这个输出?
答案 0 :(得分:4)
u+l
这应该足以满足大多数情况。如果你需要注意保留带符号的零,你可以做一些更麻烦的事情:
result = u.copy()
l_indices = numpy.tril_indices_from(l)
result[l_indices] = l[l_indices]