Semplice domanda sulla matrice numpy in Python
Domanda
Supponiamo di avere una variabile matrice numpy chiamata MATRIX con 3 coordinate: (x, y, z).
Sta aumentando il valore della matrice attraverso il seguente codice
myVar = MATRIX[0,0,0]
uguale a
myVar = MATRIX[0,0][0]
o
myVar = MATRIX[0][0,0]
E se avessi il seguente codice?
myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]
L'ultima riga equivale a fare
myVar = MATRIX[myTuple[0], myTuple[1], myScalar]
Ho fatto dei semplici test e sembra di sì, ma forse non è così in tutti i casi. Come funzionano le parentesi quadre in python con matrici numpy? Sin dal primo giorno mi sono sentito confuso su come funzionano.
Grazie
Soluzione
Suppongo che tu abbia un'istanza array
anziché una matrice
, poiché quest'ultima può avere solo due dimensioni.
m [0, 0, 0]
riporta l'elemento in posizione (0, 0, 0).
m [0, 0]
ottiene un intero subarray (una sezione), che è esso stesso un array
. È possibile ottenere il primo elemento di questo subarray in questo modo: m [0, 0] [0]
, motivo per cui funzionano entrambe le sintassi (anche se m [i, j, k]
è preferito perché non ha il passaggio intermedio non necessario).
Dai un'occhiata a questa sessione di 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
Funziona così solo per
array intorpiditi. Le tuple e gli elenchi incorporati in Python non sono indicizzabili in base alle tuple, ma solo ai numeri interi.
Altri suggerimenti
Non è possibile indicizzare una tupla con un'altra tupla, quindi nessuno di quel codice è valido.