Also erstelle ich ein numpy Array:
a = np.arange(25).reshape(5,5)
Array ([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19] , [20, 21, 22, 23, 24]])
Ein herkömmliches Slice a[1:3,1:3]
kehrt zurück
Array ([[6, 7], [11, 12]])
ebenso wie die Verwendung einer Liste in der zweiten a[1:3,[1,2]]
Array ([[6, 7], [11, 12]])
Gibt jedoch a[[1,2],[1,2]]
zurück
Array ([6, 12])
Offensichtlich verstehe ich hier etwas nicht. Das Schneiden mit einer Liste kann jedoch gelegentlich sehr nützlich sein.
Prost,
keng
a[[1,2],[1,2]]
sagena[[1:2],[1:2]]
? Gibt es einen Tippfehlera[1:3,[1,2]]
? Oder verstehe ich falsch?Antworten:
Sie haben den Effekt der sogenannten erweiterten Indizierung beobachtet . Betrachten wir ein Beispiel aus dem Link:
Sie können dies als Bereitstellung von Listen mit (kartesischen) Gitterkoordinaten betrachten, z
quelle
Im letzten Fall werden die beiden einzelnen Listen als separate Indexierungsvorgänge behandelt (dies ist eine sehr umständliche Formulierung, bitte nehmen Sie Kontakt mit mir auf).
Numpy sieht zwei Listen mit zwei ganzen Zahlen und entscheidet, dass Sie daher nach zwei Werten fragen. Der Zeilenindex jedes Werts stammt aus der ersten Liste, während der Spaltenindex jedes Werts aus der zweiten Liste stammt. Deshalb bekommst du
a[1,1]
unda[2,2]
. Die:
Notation erweitert sich nicht nur auf die Liste, die Sie genau abgeleitet haben, sondern teilt numpy auch mit, dass Sie alle Zeilen / Spalten in diesem Bereich haben möchten.Wenn Sie manuell kuratierte Listenindizes bereitstellen, müssen diese dieselbe Größe haben, da die Größe jeder Liste der Anzahl der Elemente entspricht, die Sie zurückerhalten. Wenn Sie beispielsweise die Elemente in den Spalten 1 und 2 der Zeilen 1,2,3 möchten:
Aber
Die ehemalige sagt numpy , dass Sie eine Reihe von Zeilen und Spalten spezifischer wollen, während die letzteren sagt „hol mir die Elemente an
(1,1)
,(2,2)
und(3, hey! what the?! where's the other index?)
“quelle
a[[1,2],[1,2]]
liest dies als, ich möchte ein [1,1] und ein [2,2]. Es gibt ein paar Möglichkeiten, dies zu umgehen, und ich habe wahrscheinlich nicht einmal die besten Möglichkeiten, aber Sie könnten es versuchenDadurch erhalten Sie eine abgeflachte Version von oben
Dadurch erhalten Sie das richtige Slice. Es werden die Zeilen [1,2] und dann die Spalten [1,2] verwendet.
quelle
Es löst eine erweiterte Indizierung aus, sodass der erste Slice der Zeilenindex und der zweite der Spaltenindex ist. Für jede Zeile wird die entsprechende Spalte ausgewählt.
quelle