Ich versuche, 2 dreieckige NumPy-Arrays in ein neues Array in Python zu kombinieren. Jedes dreieckige Array ist zur Hälfte mit Werten gefüllt, mit Nullen auf der Diagonalen. Ich muss diese 2 Arrays in ein neues kombiniertes Array mit Nullen auf der Diagonale zusammenführen. HierPython NumPy verketten 2 dreieckige Arrays über/unter Diagonale
ist das Array 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]]
ich dann extrahieren Sie die lower und eine modifizierte Version der upper diagonalen Werte aus dem Array:
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. ]]
Nun, ich brauche diese 2 zu kombinieren Arrays u
und l
zusammen, so dass:
- das obere Dreieck (nicht diagonal einschließlich) mit
u
- das unteren Dreieck (ohne diagonal) mit
l
- diagonalen noch gefüllt mit Nullen
Hier gefüllt ist gefüllt ist, was ich Bin auf der Suche nach:
Gibt es eine Möglichkeit, diese 2 NumPy Arrays zu verketten, um diese Ausgabe zu bekommen?
ul = np.where (u == 0, l, u) vielleicht – NaN
Ok, ich die Antwort unten als akzeptiert markiert . Diese Methode ist jedoch sehr präzise und funktioniert auch. Ich habe 'u [u == 0] = l' ausprobiert, aber das hat nicht funktioniert. Gute Antwort. Danke @NaN. –
Es ist nützlich ... a = np.zeros ((4,4), dtype = int) ... b = np.bereich (16) .reshape (4,4) ... u = np.triu (a + 1, k = 1) ... versuch ... np.wobei (u == 0, b, a) ... oder ... np.wobei (u == 0, a + 5, b) ... ermöglicht Verknüpfungen zu mehreren Array-Konstruktionsalternativen. Plus können Sie verwenden ... ur = np.rot90 (u) ... wenn die Ausrichtung von Triu oder Trial nicht – NaN