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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top