Heim  >  Artikel  >  Backend-Entwicklung  >  Wie rollt man Matrixzeilen mithilfe der erweiterten Indizierung unabhängig voneinander?

Wie rollt man Matrixzeilen mithilfe der erweiterten Indizierung unabhängig voneinander?

Susan Sarandon
Susan SarandonOriginal
2024-10-21 14:11:30674Durchsuche

How to Roll Matrix Rows Independently Using Advanced Indexing?

Unabhängiges Rollen von Matrixzeilen mit erweiterter Indizierung

Im Bereich der Datenmanipulation ist es oft notwendig, komplexe Operationen an mehrdimensionalen Arrays durchzuführen. Ein solches Szenario beinhaltet das unabhängige Rollen der Zeilen einer Matrix auf der Grundlage der bereitgestellten Verschiebungswerte.

Bei einer gegebenen Eingabematrix A und einem Array von Verschiebungswerten r besteht die Aufgabe darin, die Rolloperation auf jede Zeile von A anzuwenden unter Verwendung der entsprechenden Verschiebung von r. Das gewünschte Ergebnis ist:

[[0 0 4]
 [1 2 3]
 [0 5 0]]

Die erweiterte Indizierung bietet eine elegante Lösung für diese Herausforderung. Durch die Nutzung negativer Verschiebungswerte und fortschrittlicher Array-Slicing-Techniken können Sie den Rollvorgang wie folgt effizient implementieren:

<code class="python">rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Always use a negative shift, so that column_indices are valid.
# Alternative: r %= A.shape[1]
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

result = A[rows, column_indices]</code>

Bei diesem Ansatz generiert ogrid ein Raster von Indizes, die den Zeilen und Spalten von A entsprechen. By Durch die Manipulation der Spaltenindizes basierend auf den negativen Verschiebungswerten wird die Rolloperation effektiv auf jede Zeile angewendet. Diese Methode bietet eine hocheffiziente Lösung zum unabhängigen Rollen von Matrixzeilen, ohne dass Schleifen erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie rollt man Matrixzeilen mithilfe der erweiterten Indizierung unabhängig voneinander?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn