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

War es hilfreich?

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 arrays. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top