In numpy array
s bezieht sich die Dimensionalität auf die Anzahl der axes
zum Indizieren erforderlichen Dimensionen, nicht auf die Dimensionalität eines geometrischen Raums. Beispielsweise können Sie die Positionen von Punkten im 3D-Raum mit einem 2D-Array beschreiben:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
Welches hat shape
von (4, 3)
und Dimension 2
. Es kann jedoch den 3D-Raum beschreiben, da die Länge jeder Zeile ( axis
1) drei beträgt, sodass jede Zeile die x-, y- und z-Komponente der Position eines Punkts sein kann. Die Länge axis
0 gibt die Anzahl der Punkte an (hier 4). Dies ist jedoch eher eine Anwendung auf die Mathematik, die der Code beschreibt, als ein Attribut des Arrays selbst. In der Mathematik wäre die Dimension eines Vektors seine Länge (z. B. x-, y- und z-Komponenten eines 3d-Vektors), aber in numpy wird jeder "Vektor" wirklich nur als 1d-Array unterschiedlicher Länge betrachtet. Dem Array ist es egal, wie groß der beschriebene Raum (falls vorhanden) ist.
Sie können damit herumspielen und die Anzahl der Dimensionen und Formen eines Arrays wie folgt anzeigen:
In [262]: a = np.arange(9)
In [263]: a
Out[263]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [264]: a.ndim
Out[264]: 1
In [265]: a.shape
Out[265]: (9,)
In [266]: b = np.array([[0,0,0],[1,2,3],[2,2,2],[9,9,9]])
In [267]: b
Out[267]:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
In [268]: b.ndim
Out[268]: 2
In [269]: b.shape
Out[269]: (4, 3)
Arrays können viele Dimensionen haben, aber über zwei oder drei sind sie schwer zu visualisieren:
In [276]: c = np.random.rand(2,2,3,4)
In [277]: c
Out[277]:
array([[[[ 0.33018579, 0.98074944, 0.25744133, 0.62154557],
[ 0.70959511, 0.01784769, 0.01955593, 0.30062579],
[ 0.83634557, 0.94636324, 0.88823617, 0.8997527 ]],
[[ 0.4020885 , 0.94229555, 0.309992 , 0.7237458 ],
[ 0.45036185, 0.51943908, 0.23432001, 0.05226692],
[ 0.03170345, 0.91317231, 0.11720796, 0.31895275]]],
[[[ 0.47801989, 0.02922993, 0.12118226, 0.94488471],
[ 0.65439109, 0.77199972, 0.67024853, 0.27761443],
[ 0.31602327, 0.42678546, 0.98878701, 0.46164756]],
[[ 0.31585844, 0.80167337, 0.17401188, 0.61161196],
[ 0.74908902, 0.45300247, 0.68023488, 0.79672751],
[ 0.23597218, 0.78416727, 0.56036792, 0.55973686]]]])
In [278]: c.ndim
Out[278]: 4
In [279]: c.shape
Out[279]: (2, 2, 3, 4)
Es ist von Rang eins, da Sie einen Index benötigen, um es zu indizieren. Diese eine Achse hat die Länge 3, da die Indexindizierung drei verschiedene Werte annehmen kann :
v[i], i=0..2
.quelle
Fügen Sie einfach einen Teil der Antwort aus dieser Antwort ein :
In Numpy sind Dimension , Achse / Achse , Form verwandte und manchmal ähnliche Konzepte:
In [1]: import numpy as np In [2]: a = np.array([[1,2],[3,4]])
Abmessungen
In Mathematik / Physik wird Dimension oder Dimensionalität informell als die Mindestanzahl von Koordinaten definiert, die erforderlich sind, um einen Punkt innerhalb eines Raums anzugeben. Aber in Numpy ist es laut Numpy Doc dasselbe wie Achse / Achsen:
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension* Out[3]: 2
Achse / Achsen
die n-te Koordinate zum Indizieren eines
array
in Numpy. Mehrdimensionale Arrays können einen Index pro Achse haben.In [4]: a[1,0] # to index `a`, we specific 1 at the first axis and 0 at the second axis. Out[4]: 3 # which results in 3 (locate at the row 1 and column 0, 0-based index)
gestalten
beschreibt, wie viele Daten entlang jeder verfügbaren Achse vorliegen.
In [5]: a.shape Out[5]: (2, 2) # both the first and second axis have 2 (columns/rows/pages/blocks/...) data
quelle
Sie können den Achsenparameter auch in Gruppenoperationen verwenden, wenn Achse = 0 ist. Numpy führt die Aktion für Elemente jeder Spalte aus. Wenn Achse = 1, führt sie die Aktion für Zeilen aus.
test = np.arange(0,9).reshape(3,3) Out[3]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) test.sum(axis=0) Out[5]: array([ 9, 12, 15]) test.sum(axis=1) Out[6]: array([ 3, 12, 21])
quelle
So verstehe ich es. Ein Punkt ist ein 1D-Objekt. Sie können nur seine Position definieren. Es hat keine Dimensionen. Eine Linie oder Fläche ist ein 2D-Objekt. Sie können es sowohl durch seine Position als auch durch seine Länge bzw. Fläche definieren, z. B. Rechteck, Quadrat, Kreis. Ein Volumen ist ein 3D-Objekt. Sie können es durch seine Position, Oberfläche / Länge und Volumen definieren, z. B. Kugel, Würfel.
Daraus definieren Sie einen Punkt in NumPy durch eine einzelne Achse (Dimension), unabhängig von der Anzahl der verwendeten mathematischen Achsen. Für die x- und y-Achse ist ein Punkt als [2,4] definiert, und für die x-, y- und z-Achse ist ein Punkt als [2,4,6] definiert. Beides sind Punkte, also 1D.
Um eine Linie zu definieren, werden zwei Punkte benötigt. Dies erfordert eine Form der Verschachtelung der Punkte in die zweite Dimension (2D). Als solche kann eine Linie nur unter Verwendung von x und y als [[2,4], [6,9]] oder unter Verwendung von x, y und z als [[2,4,6], [6,9,12] definiert werden ]]. Für eine Oberfläche sind lediglich mehr Punkte erforderlich, um sie zu beschreiben, es bleibt jedoch ein 2D-Objekt. Zum Beispiel benötigt ein Dreieck 3 Punkte, während ein Rechteck / Quadrat 4 Punkte benötigt.
Ein Volumen benötigt 4 (ein Tetraeder) oder mehr Punkte, um es zu definieren, behält jedoch die Verschachtelung von Punkten in der dritten Dimension (3D) bei.
quelle