Einfache Frage über numpy Matrix in Python
Frage
Nehmen wir an, ich habe eine numpy variable Matrix MATRIX mit 3 Koordinaten bezeichnet. (X, y, z)
Ist acessing der Wert der Matrix durch den folgenden Code
myVar = MATRIX[0,0,0]
gleich
myVar = MATRIX[0,0][0]
oder
myVar = MATRIX[0][0,0]
Was ist, wenn ich den folgenden Code haben?
myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]
Ist die letzte Zeile entspricht tun
myVar = MATRIX[myTuple[0], myTuple[1], myScalar]
Ich habe einfache Tests durchgeführt, und es scheint so, aber vielleicht ist das nicht so in allen Fällen. Wie funktionieren eckige Klammern in Python mit numpy Matrizen? Seit 1 Tag fühlte ich mich verwirrt, wie sie funktionieren.
Danke
Lösung
Ich nehme an, Sie eine array
Instanz eher als ein matrix
, da nur die beiden letztgenannten Dimensionen haben kann.
m[0, 0, 0]
Ruft das Element an der Position (0, 0, 0).
m[0, 0]
erhält eine ganze Subarray (a slice), das ein array
selbst ist. Sie können das erste Element dieses Sub-Array erhalten wie folgt aus:. m[0, 0][0]
, weshalb beide Syntaxen arbeiten (obwohl m[i, j, k]
bevorzugt, weil sie nicht die unnötige Zwischenschritt hat)
Werfen Sie einen Blick auf diese ipython Sitzung:
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
Es funktioniert nur, wie dies für numpy array
s. Python eingebaute in Tupeln und Listen sind nicht Wende von Tupeln, nur durch ganze Zahlen sind.
Andere Tipps
Es ist nicht möglich, ein Tupel mit einem anderen Tupel zu indizieren, so dass keiner der Code gültig ist.