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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top