У numpy array
s розмірність відноситься до кількості, axes
необхідної для її індексації, а не до розмірності будь-якого геометричного простору. Наприклад, ви можете описати розташування точок у тривимірному просторі за допомогою 2D-масиву:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
Що має shape
в (4, 3)
і розмірності 2
. Але він може описати тривимірний простір, оскільки довжина кожного рядка ( axis
1) дорівнює трьом, тому кожен рядок може бути компонентом x, y та z розташування точки. Довжина axis
0 означає кількість балів (тут 4). Однак це більше додаток до математики, яку описує код, а не атрибут самого масиву. У математиці розмірність вектора буде його довжиною (наприклад, компоненти x, y та z 3d-вектора), але в numpy будь-який "вектор" насправді просто вважається 1d-масивом різної довжини. Масиву байдуже, який розмір описуваного простору (якщо такий є).
Ви можете пограти з цим і побачити кількість розмірів і форми масиву приблизно так:
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)
Масиви можуть мати багато вимірів, але їх стає важко візуалізувати вище двох-трьох:
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)