Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man Matrixzeilen mit der erweiterten Numpy-Indizierung effizient rollen?

Wie kann man Matrixzeilen mit der erweiterten Numpy-Indizierung effizient rollen?

DDD
DDDOriginal
2024-10-21 13:40:03471Durchsuche

How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?

Effizientes Matrixzeilenrollen mit Numpy Advanced Indexing

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:

  • Erstellen Sie mit np.ogrid ein Raster aus Indizes, das die Zeilen und Spalten der Matrix darstellt.
  • Passen Sie die Rolle an Werte, um eine negative Verschiebung sicherzustellen, was zu gültigen Spaltenindizes führt.
  • Subtrahieren Sie die Rollwerte vom Spaltenindexraster und übertragen Sie die Rollwerte entlang der Zeilen.
  • Verwenden Sie die erweiterte Indizierung, um die Rollwerte abzurufen Elemente aus der ursprünglichen Matrix A.

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!

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