ede*_*esz 0 python arrays numpy concatenation diagonal
我试图在 Python 中将 2 个三角形 NumPy 数组组合成一个新数组。每个三角形数组都填充了一半的值,对角线上的值为零。我需要将这 2 个数组合并为一个对角线上带有零的新组合数组。
这是数组 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]]
Run Code Online (Sandbox Code Playgroud)
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. ]]
Run Code Online (Sandbox Code Playgroud)
现在,我需要这2个阵列组合u并l在一起,这样:
ul这是我要找的:
[[ 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. ]]
Run Code Online (Sandbox Code Playgroud)
有没有办法连接这 2 个 NumPy 数组来获得这个输出?
u+l
Run Code Online (Sandbox Code Playgroud)
对于大多数情况,这应该足够了。如果您需要小心保留带符号的零,您可以做一些更麻烦的事情:
result = u.copy()
l_indices = numpy.tril_indices_from(l)
result[l_indices] = l[l_indices]
Run Code Online (Sandbox Code Playgroud)