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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top