python - español - Desembalaje de tuplas/matrices/listas como índices para matrices numpy
numpy tutorial español pdf (4)
Me encantaría poder hacer
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
y obten
1
Sin embargo, esta sintaxis no es válida. ¿Hay una manera de hacer esto sin escribir explícitamente
>>> A[idx[0], idx[1]]
?
EDIT: Gracias por las respuestas. En mi programa estaba indexando con una matriz Numpy en lugar de una tupla y obteniendo resultados extraños. La conversión a una tupla como Alok sugiere hace el truco.
Es más fácil de lo que piensas:
>>> import numpy
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[idx]
1
La indexación de un objeto llama:
object.__getitem__(index)
Cuando haces A [1, 2], es el equivalente de:
A.__getitem__((1, 2))
Así que cuando haces:
b = (1, 2)
A[1, 2] == A[b]
A[1, 2] == A[(1, 2)]
Ambas afirmaciones se evaluarán a verdadero.
Si le sucede que indexa con una lista, es posible que no indexe lo mismo, como [1, 2]! = (1, 2)
Tratar
A[tuple(idx)]
A menos que tenga un caso de uso más complejo que no sea tan simple como este ejemplo, lo anterior debería funcionar para todas las matrices.
No es necesario desempaquetar: cuando tienes una coma entre [
y ]
, estás haciendo una tupla, no pasando argumentos. foo[bar, baz]
es equivalente a foo[(bar, baz)]
. Así que si tienes una tupla t = bar, baz
simplemente dirías foo[t]
.