Wie indiziert man ein Numpy-Array durch ein anderes?

Mary-Kate Olsen
Freigeben: 2024-11-12 02:24:01
Original
636 Leute haben es durchsucht

How to Index One Numpy Array by Another?

Indizieren eines Arrays nach einem anderen in Numpy

Betrachten Sie zwei Matrizen, A und B , wobei A beliebige Werte enthält und B Indizes von Elementen in A enthält. Die Aufgabe besteht darin, Elemente aus A basierend auf den durch B angegebenen Indizes zu extrahieren. Diese Indizierung ermöglicht das selektive Abrufen von Elementen.

Lösung mit erweiterter Indizierung:

Die erweiterte Indizierung von Numpy ermöglicht diesen Vorgang mithilfe des Ausdrucks:

A[np.arange(A.shape[0])[:,None], B]
Nach dem Login kopieren

Dieser Ansatz verwendet eine Kombination aus Zeilenindizes und Spaltenindizes, die von B abgerufen wurden, um Elemente in A abzurufen.

Lösung mit linearer Indizierung:

Ein alternativer Ansatz beinhaltet die lineare Indizierung:

m, n = A.shape
out = np.take(A, B + n*np.arange(m)[:,None])
Nach dem Login kopieren

Hier repräsentieren m und n die Dimensionen von A, und die Operationen innerhalb der Funktion np.take() stellen die korrekte Indizierung von Elementen basierend auf B sicher.

Beispiel:

Lassen Sie uns diese Lösungen anhand eines Beispiels veranschaulichen:

import numpy as np

A = np.array([[2, 4, 5, 3],
              [1, 6, 8, 9],
              [8, 7, 0, 2]])

B = np.array([[0, 0, 1, 2],
              [0, 3, 2, 1],
              [3, 2, 1, 0]])

# Advanced indexing
result1 = A[np.arange(A.shape[0])[:,None], B]

# Linear indexing
m, n = A.shape
result2 = np.take(A, B + n*np.arange(m)[:,None])

print("Result using advanced indexing:")
print(result1)

print("Result using linear indexing:")
print(result2)
Nach dem Login kopieren

Ausgabe:

Result using advanced indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

Result using linear indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie indiziert man ein Numpy-Array durch ein anderes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage