Numpy Array Permute Spalten 3D Matrix mit Argsort

Ich muss Elemente der Spalten in der Matrix "A" (3D Matrix nach Achse 0) durch 2D Permutationsmatrix "pi" aus argsort, die neue Indizes für alle Spalten enthält, permutieren. Durch Applikation Permutationsmatrix "pi" auf der Matrix "A" (A [pi]) bekomme ich 4D Matrix mit neuer Form. Beispielsweise ist Form (A) (2,3,4) und Form (A [pi]) ist (2,3,3,4). Ich bin in der Lage, geforderte sortierte Matrix aus A [pi] durch Befehl zu extrahieren: swapaxes (diagonal (A [pi], axis1 = 2, axis2 = 1), 1,2) Aber IMHO scheint es zu kompliziert und langsam zu sein. Gibt es noch eine elegante Lösung?

Beispiel:

print(A) [[[ 73 701 2411 2414] [ 5515 8292 8414 16135] [ 100 1241 2146 2931]] [[ 1335 1747 3418 6312] [ 3788 5449 5753 9738] [ 565 3038 3800 5430]]] pi=argsort(Norm_order(A),0) print(pi) [[1, 0, 1], [0, 1, 0]] print(swapaxes(diagonal(A[pi],axis1=2,axis2=1),1,2)) [[[ 1335 1747 3418 6312] [ 5515 8292 8414 16135] [ 565 3038 3800 5430]] [[ 73 701 2411 2414] [ 3788 5449 5753 9738] [ 100 1241 2146 2931]]] 

One Solution collect form web for “Numpy Array Permute Spalten 3D Matrix mit Argsort”

Vielleicht eine Frage des Geschmacks, aber ich finde das folgende ein bisschen mehr lesbar:

 i, j = np.ogrid[:3, :4] A[pi[..., None], i, j] 

Ausgabe:

 array([[[ 1335, 1747, 3418, 6312], [ 5515, 8292, 8414, 16135], [ 565, 3038, 3800, 5430]], [[ 73, 701, 2411, 2414], [ 3788, 5449, 5753, 9738], [ 100, 1241, 2146, 2931]]]) 
  • Warum Numpy.all () und irgendwelche () geben falsche Ergebnisse, wenn Sie Generatorausdrücke verwenden?
  • Extrahieren Sie Array-Indizes, die einen bestimmten Wert enthalten
  • Führen Sie 2 Probe t-Test
  • Thread-Fehler: kann keinen neuen Thread starten
  • Berechnen des Korrelationskoeffizienten zwischen zwei mehrdimensionalen Arrays
  • Verknüpfung von Säulenvektoren mit kräuseligen Arrays
  • Np.vectorize Rückkehr Skalar Wert auf Skalar Eingang
  • Python: Wie hörst du numpy von Multithreading?
  • Wie man verschiedene Funktionen auf verschiedene Spalten auf pandas dataframe anwendet
  • Wie man Achsen in mplot3d skaliert
  • Vertikales Histogramm in Python und Matplotlib
  • Python ist die beste Programmiersprache der Welt.