Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man Matrixzeilen mit der erweiterten Numpy-Indizierung effizient rollen?
Problemstellung:
Gegeben sei eine Matrix und ein Array von Rollwerten Die Aufgabe besteht darin, jede Zeile der Matrix unabhängig entsprechend den entsprechenden Rollwerten zu würfeln. Zum Beispiel:
A = np.array([[4, 0, 0], [1, 2, 3], [0, 0, 5]]) r = np.array([2, 0, -1]) expected_result = np.array([np.roll(row, x) for row,x in zip(A, r)]) # [[0 0 4] # [1 2 3] # [0 5 0]]
Lösung mit Numpy Advanced Indexing:
Ein effizienter Ansatz zum unabhängigen Rollieren von Matrixzeilen besteht darin, die erweiterten Indizierungsfunktionen von Numpy zu nutzen:
<code class="python">import numpy as np rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]] # Ensure negative shift to keep column_indices valid r[r < 0] += A.shape[1] column_indices = column_indices - r[:, np.newaxis] result = A[rows, column_indices]</code>
Erklärung:
Dieser Ansatz ermöglicht ein effizientes und präzises Rollen von Zeilen, umgeht explizite for-Schleifen und nutzt die leistungsstarken vektorisierten Operationen von Numpy. Ob dies die schnellste Methode ist, hängt von den Array-Abmessungen und der spezifischen Systemkonfiguration ab.
Das obige ist der detaillierte Inhalt vonWie kann man Matrixzeilen mit der erweiterten Numpy-Indizierung effizient rollen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!