tutorial español array python numpy

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] .