W numpy array
s wymiarowość odnosi się do liczby axes
potrzebnej do indeksowania, a nie do wymiarowości jakiejkolwiek przestrzeni geometrycznej. Na przykład, możesz opisać położenie punktów w przestrzeni 3D za pomocą szyku 2D:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
Który ma shape
od (4, 3)
i wymiar 2
. Ale może opisywać przestrzeń 3D, ponieważ długość każdego wiersza ( axis
1) wynosi trzy, więc każdy wiersz może być składową x, y i z położenia punktu. Długość axis
0 oznacza liczbę punktów (tutaj 4). Jednak jest to bardziej zastosowanie do matematyki, którą opisuje kod, a nie atrybut samej tablicy. W matematyce wymiarem wektora byłaby jego długość (np. Składowe x, y i z wektora 3d), ale w numpy każdy „wektor” jest w rzeczywistości traktowany jako tablica 1d o różnej długości. Tablica nie dba o to, jaki jest wymiar opisywanej przestrzeni (jeśli istnieje).
Możesz się tym pobawić i zobaczyć liczbę wymiarów i kształt tablicy w następujący sposób:
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)
Tablice mogą mieć wiele wymiarów, ale trudno je wyobrazić sobie powyżej dwóch lub trzech:
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)
Ma pierwszeństwo, ponieważ do zindeksowania potrzebny jest jeden indeks. Że jedna oś ma długość 3, jak indeksowanie indeksu może potrwać trzy różne wartości
v[i], i=0..2
.źródło
Po prostu wklej część odpowiedzi z tej odpowiedzi :
W Numpy wymiar , oś / osie , kształt są powiązane, a czasem podobne pojęcia:
In [1]: import numpy as np In [2]: a = np.array([[1,2],[3,4]])
wymiar
W matematyce / fizyce wymiar lub wymiarowość definiuje się nieformalnie jako minimalną liczbę współrzędnych potrzebnych do określenia dowolnego punktu w przestrzeni. Ale w Numpy , zgodnie z dokumentem numpy , jest to to samo, co oś / osie:
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension* Out[3]: 2
oś / osie
nta współrzędnych indeksowany
array
w NumPy. Tablice wielowymiarowe mogą mieć jeden indeks na oś.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)
kształt
opisuje, ile danych wzdłuż każdej dostępnej osi.
In [5]: a.shape Out[5]: (2, 2) # both the first and second axis have 2 (columns/rows/pages/blocks/...) data
źródło
Możesz również użyć parametru axis w operacjach grupowych, w przypadku gdy axis = 0 Numpy wykonuje akcję na elementach każdej kolumny, a jeśli axis = 1, wykonuje akcję na wierszach.
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])
źródło
Tak to rozumiem. Punkt to obiekt 1D. Możesz tylko określić jego położenie. Nie ma wymiarów. Linia lub powierzchnia to obiekt 2D. Możesz go zdefiniować zarówno przez jego położenie, jak i długość lub powierzchnię, np. Prostokąt, Kwadrat, Okrąg Objętość to obiekt 3D. Możesz go zdefiniować poprzez jego położenie, powierzchnię / długości i objętość np. Kula, Kostka.
Na tej podstawie zdefiniujesz punkt w NumPy za pomocą pojedynczej osi (wymiaru), niezależnie od liczby używanych osi matematycznych. Dla osi x i y punkt definiuje się jako [2,4], a dla osi x, y i z punkt definiuje się jako [2,4,6]. Oba są punktami, a więc 1D.
Do zdefiniowania linii potrzebne będą dwa punkty. Będzie to wymagało pewnej formy „zagnieżdżenia” punktów w drugim wymiarze (2D). Jako taka, linia może być zdefiniowana przy użyciu xiy tylko jako [[2,4], [6,9]] lub używając x, yiz jako [[2,4,6], [6,9,12 ]]. W przypadku powierzchni będzie to po prostu wymagało większej liczby punktów, aby ją opisać, ale nadal pozostanie obiektem 2D. Na przykład trójkąt będzie wymagał 3 punktów, a prostokąt / kwadrat - 4.
Objętość będzie wymagała 4 (czworościanu) lub więcej punktów, aby ją zdefiniować, ale nadal będzie zachowywać „zagnieżdżenie” punktów w trzecim wymiarze (3D).
źródło