2016-12-06 112 views
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結合陣列ul一起使得:

  1. 上的三角形(不包括對角)充滿u
  2. 下三角(不包括對角)充滿l
  3. 對角線還是有一些零

這裏是我的我正在尋找:

[[ 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數組來獲得這個輸出?

+1

UL = np.where(U == 0,L,U)也許 – NaN

+0

好吧,我在下面標記爲接受的答案。但是,這種方法非常簡潔,也適用。我試過'u [u == 0] = l',但那不起作用。很好的答案。謝謝@NaN。 –

+0

它是有用的... 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

回答

4
u+l 

這應該足以滿足大多數情況。如果你需要小心維護符號的零,你可以做一些事情更麻煩:

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

謝謝。我試圖直接採用值,而不使用索引。這沒有用。這很好用! –

相關問題