Question simple sur la matrice numpy en python
Question
Supposons que j'ai une variable matricielle appelée MATRIX à 3 coordonnées: (x, y, z).
accède à la valeur de la matrice par le code suivant
myVar = MATRIX[0,0,0]
égal à
myVar = MATRIX[0,0][0]
ou
myVar = MATRIX[0][0,0]
?
Et si j'ai le code suivant?
myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]
Est-ce que la dernière ligne est équivalente à faire
myVar = MATRIX[myTuple[0], myTuple[1], myScalar]
J'ai fait des tests simples et il semble que oui, mais ce n'est peut-être pas le cas dans tous les cas. Comment fonctionnent les crochets en python avec les matrices numpy? Depuis le premier jour, je me suis senti confus quant à la façon dont ils fonctionnent.
Merci
La solution
Je suppose que vous avez une instance array
plutôt qu'une matrice
, car cette dernière ne peut avoir que deux dimensions.
m [0, 0, 0]
obtient l'élément à la position (0, 0, 0).
m [0, 0]
obtient un sous-tableau entier (une tranche), qui est lui-même un tableau
. Vous pouvez obtenir le premier élément de ce sous-tableau comme ceci: m [0, 0] [0]
, c’est pourquoi les deux syntaxes fonctionnent (même si m [i, j, k]
est préféré car il ne comporte pas l'étape intermédiaire inutile).
Regardez cette session 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
Cela ne fonctionne comme ceci que pour numpy array
. Les n-uplets et les listes intégrés à Python ne sont pas indexables par des n-uplets, mais par des entiers.
Autres conseils
Il n'est pas possible d'indexer un tuple avec un autre, donc aucun de ce code n'est valide.