Andere Form zum Indexieren in Python

Oct 08 2020

Ich absolviere einen Kurs zum maschinellen Lernen und in einer Überprüfung der Numpy-Bibliothek wird eine Indexierungsmethode verwendet, die ich noch nie zuvor gesehen habe. Wir haben definiert a = np.array([[1,2],[3,4],[5,6]]). Anschließend werden zwei neue Arrays erstellt : np.array([a[0,0], a[1,1], a[2,1]]. Dies ist die Art der Indizierung, die ich kenne. Die Art der Indizierung, die ich nicht kenne, ist folgende : print(a[[0,1,2],[0,1,1]]). Könnte mir jemand mit einer Erklärung zu dieser neuesten Form der Indizierung helfen?

Antworten

1 Marat Oct 08 2020 at 05:15

Wenn nArrays übergeben werden, wobei ndie Anzahl der Array-Dimensionen angegeben ist, werden sie als Indizes für entsprechende Dimensionen verwendet. a[[0,1,2],[0,1,1]]ist äquivalent zu[a[0,0], a[1,1], a[2,1]]

Lassen Sie mich numpy docs zitieren :

... Aus jeder Zeile sollte ein bestimmtes Element ausgewählt werden. Der Zeilenindex ist nur [0, 1, 2] und der Spaltenindex gibt das Element an, das für die entsprechende Zeile ausgewählt werden soll, hier [0, 1, 0]. Wenn Sie beide zusammen verwenden, kann die Aufgabe mithilfe der erweiterten Indizierung gelöst werden:

x = np.array([[1, 2], [3, 4], [5, 6]])

x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])
1 Gabitohh Oct 08 2020 at 05:29

Es ruft die Indizierung ganzzahliger Arrays auf . In Ihrem Beispiel greifen Sie auf [[0,1,2],[0,1,1]]Indizes eines aufgerufenen 1x3-Arrays zu a. Es bedeutet, Sie erhalten von a:

[
    the first element of the first array,contained in this 1x3 array,
    the second element of the second array, contained in this big array,
    the second element of the third array, contained in the same array
]

Ausdrucken, werden Sie die Ausgabe bekommen [1 4 6], denn das sind die Elemente in den angegebenen Positionen sind ( (0,0), (1,1), (2,1)). Sie können es wie ein Spalten- und Zeilenschema visualisieren :

[[rows],[colums]] # vertically speaking

Sie wählen die Zeilen der gewünschten Elemente im ersten Unterarray und die Spalten im zweiten aus.