En el último caso, las dos listas individuales se tratan como operaciones de indexación separadas (esta es una redacción realmente incómoda, así que tengan paciencia conmigo).
Numpy ve dos listas de dos enteros y decide que, por lo tanto, está solicitando dos valores. El índice de fila de cada valor proviene de la primera lista, mientras que el índice de columna de cada valor proviene de la segunda lista. Por lo tanto, obtienes a[1,1]
y a[2,2]
. La :
notación no solo se expande a la lista que ha deducido con precisión, sino que también le dice a numpy que desea todas las filas / columnas en ese rango.
Si proporciona índices de lista seleccionados manualmente, deben ser del mismo tamaño, porque el tamaño de cada lista es el número de elementos que obtendrá. Por ejemplo, si desea los elementos en las columnas 1 y 2 de las filas 1,2,3:
>>> a[1:4,[1,2]]
array([[ 6, 7],
[11, 12],
[16, 17]])
Pero
>>> 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,)
El primero le dice numpy que desea un rango de filas y columnas específicas, mientras que el segundo dice "me consigue los elementos a (1,1)
, (2,2)
y (3, hey! what the?! where's the other index?)
"
a[[1,2],[1,2]]
supone que debe decira[[1:2],[1:2]]
? ¿Hay un error tipográficoa[1:3,[1,2]]
? ¿O estoy malentendido?