0
我想在Python中將2個三角形NumPy數組組合成一個新數組。每個三角形陣列都是半值填充的,在對角線上爲零。我需要將這兩個數組合併成一個新的組合數組,其對角線上的零點。Python 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]]
我然後提取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. ]]
現在,我需要將這些2結合陣列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. ]]
有沒有辦法連接這2個NumPy數組來獲得這個輸出?
UL = np.where(U == 0,L,U)也許 – NaN
好吧,我在下面標記爲接受的答案。但是,這種方法非常簡潔,也適用。我試過'u [u == 0] = l',但那不起作用。很好的答案。謝謝@NaN。 –
它是有用的... a = np.zeros((4,4),dtype = int)... b = np.arange(16).reshape(4,4)... u = np.triu (u == 0,a + 5,b)a, ...啓用幾個陣列構建方法的捷徑。另外,您可以使用... ur = np.rot90(u)...如果triu或trial的方向不適合 – NaN