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]
und a[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:
>>> a[1:4,[1,2]]
array([[ 6, 7],
[11, 12],
[16, 17]])
Aber
>>> a[[1,2,3],[1,2]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)
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?)
“
a[[1,2],[1,2]]
sagena[[1:2],[1:2]]
? Gibt es einen Tippfehlera[1:3,[1,2]]
? Oder verstehe ich falsch?