Pregunta simple sobre matriz numpy en python
Pregunta
Supongamos que tengo una variable de matriz numpy llamada MATRIX con 3 coordenadas: (x, y, z).
Está accediendo al valor de la matriz a través del siguiente código
myVar = MATRIX[0,0,0]
igual a
myVar = MATRIX[0,0][0]
o
myVar = MATRIX[0][0,0]
?
¿Qué pasa si tengo el siguiente código?
myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]
Es la última línea equivalente a hacer
myVar = MATRIX[myTuple[0], myTuple[1], myScalar]
He hecho pruebas simples y parece que sí, pero tal vez no sea así en todos los casos. ¿Cómo funcionan los corchetes en python con matrices numpy? Desde el primer día me sentí confundido sobre cómo funcionan.
Gracias
Solución
Supongo que tiene una instancia de array
en lugar de una matrix
, ya que esta última solo puede tener dos dimensiones.
m [0, 0, 0]
obtiene el elemento en la posición (0, 0, 0).
m [0, 0]
obtiene un subconjunto completo (un segmento), que en sí mismo es un array
. Puede obtener el primer elemento de esta submatriz de esta manera: m [0, 0] [0]
, por lo que ambas sintaxis funcionan (aunque m [i, j, k]
se prefiere porque no tiene el paso intermedio innecesario).
Eche un vistazo a esta sesión de ipython:
rbonvall@andy:~$ ipython
Python 2.5.4 (r254:67916, Sep 26 2009, 08:19:36)
[...]
In [1]: import numpy.random
In [2]: m = numpy.random.random(size=(3, 3, 3))
In [3]: m
Out[3]:
array([[[ 0.68853531, 0.8815277 , 0.53613676],
[ 0.9985735 , 0.56409085, 0.03887982],
[ 0.12083102, 0.0301229 , 0.51331851]],
[[ 0.73868543, 0.24904349, 0.24035031],
[ 0.15458694, 0.35570177, 0.22097202],
[ 0.81639051, 0.55742805, 0.5866573 ]],
[[ 0.90302482, 0.29878548, 0.90705737],
[ 0.68582033, 0.1988247 , 0.9308886 ],
[ 0.88956484, 0.25112987, 0.69732309]]])
In [4]: m[0, 0]
Out[4]: array([ 0.68853531, 0.8815277 , 0.53613676])
In [5]: m[0, 0][0]
Out[5]: 0.6885353066709865
Solo funciona así para numpy array
s. Las tuplas y listas incorporadas de Python no se pueden indexar por tuplas, solo por enteros.
Otros consejos
No es posible indexar una tupla con otra tupla, por lo que ninguno de ese código es válido.