Entonces, creo una matriz numpy:
a = np.arange(25).reshape(5,5)
matriz ([[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]])
Un corte convencional a[1:3,1:3]
vuelve
matriz ([[6, 7], [11, 12]])
al igual que usar una lista en el segundo a[1:3,[1,2]]
matriz ([[6, 7], [11, 12]])
Sin embargo, a[[1,2],[1,2]]
vuelve
matriz ([6, 12])
Obviamente no estoy entendiendo algo aquí. Dicho esto, cortar una lista en ocasiones puede ser muy útil.
Salud,
keng
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?Respuestas:
Usted observó el efecto de la denominada indexación avanzada . Consideremos el ejemplo del enlace:
Puede pensar en esto como proporcionar listas de coordenadas (cartesianas) de la cuadrícula, como
fuente
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]
ya[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:
Pero
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?)
"fuente
a[[1,2],[1,2]]
está leyendo esto como, quiero un [1,1] y un [2,2]. Hay algunas maneras de evitar esto y probablemente ni siquiera tengo las mejores formas, pero podrías intentarEsto le dará una versión aplanada de arriba
Esto le dará el corte correcto, funciona tomando las filas [1,2] y luego las columnas [1,2].
fuente
Activa la indexación avanzada, por lo que el primer segmento es el índice de fila, el segundo es el índice de columna. Para cada fila, selecciona la columna correspondiente.
fuente