Що таке розмірність і вісь у Python NumPy?


82

Я кодую за допомогою NumPyмодуля Pythons . Якщо координати точки в тривимірному просторі описуються як [1, 2, 1], чи не буде це тривимірність, три осі, ранг три? Або якщо це один вимір, то чи не повинні це бути точки (множина), а не точка?

Ось документація:

У Numpy розміри називаються осями. Кількість осей - ранг. Наприклад, координати точки в тривимірному просторі [1, 2, 1] є масивом рангу 1, оскільки він має одну вісь. Ця вісь має довжину 3.

Джерело: http://wiki.scipy.org/Tentative_NumPy_Tutorial

Відповіді:


97

У numpy arrays розмірність відноситься до кількості, axesнеобхідної для її індексації, а не до розмірності будь-якого геометричного простору. Наприклад, ви можете описати розташування точок у тривимірному просторі за допомогою 2D-масиву:

array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

Що має shapeв (4, 3)і розмірності 2. Але він може описати тривимірний простір, оскільки довжина кожного рядка ( axis1) дорівнює трьом, тому кожен рядок може бути компонентом x, y та z розташування точки. Довжина axis0 означає кількість балів (тут 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    # number of dimensions
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)


9

Він має перший ранг, оскільки для його індексування потрібен один індекс. Це одна вісь має довжину 3, в якості індексу індексації він може приймати три різних значення: v[i], i=0..2.


8

Просто вставте частину відповіді з цієї відповіді :

У Numpy розмірність , вісь / осі , форма пов'язані, а іноді і подібні поняття:

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

розмірність

В математиці / фізиці розмірність або розмірність неофіційно визначається як мінімальна кількість координат, необхідна для задання будь-якої точки в просторі. Але в Numpy , згідно з документом numpy , це те саме, що вісь / вісь:

У Numpy розміри називаються осями. Кількість осей - ранг.

In [3]: a.ndim  # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2

вісь / осі

енний координат індексувати arrayв Numpy. А багатовимірні масиви можуть мати один індекс на вісь.

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)

форму

описує, скільки даних вздовж кожної доступної осі.

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data

5

Ви також можете використовувати параметр осі в групових операціях, якщо вісь = 0, Numpy виконує дію з елементами кожного стовпця, а якщо вісь = 1, то виконує дію з рядками.

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])

4

Я так це розумію. Точка - це одновимірний об’єкт. Ви можете визначити лише його положення. Він не має розмірів. Лінія або поверхня - це 2D-об’єкт. Ви можете визначити його як за його положенням, так і за довжиною або площею відповідно, наприклад, Прямокутник, Квадрат, Коло Том - це 3D-об’єкт. Ви можете визначити його за його положенням, площею / довжиною поверхні та об’ємом, наприклад, сфера, куб.

З цього ви визначите точку в NumPy за однією віссю (розмірністю), незалежно від кількості використовуваних вами математичних осей. Для осей x та y точка визначається як [2,4], а для осей x, y та z точка визначається як [2,4,6]. Обидва вони є точками, отже, 1D.

Щоб визначити пряму, знадобляться дві точки. Для цього знадобиться певна форма "вкладеності" точок у другий вимір (2D). Як такий, рядок може бути визначений, використовуючи x та y лише як [[2,4], [6,9]] або використовуючи x, y та z як [[2,4,6], [6,9,12 ]]. Для поверхні просто знадобиться більше точок, щоб описати її, але все одно залишається двовимірним об’єктом. Наприклад, трикутнику знадобляться 3 точки, а прямокутнику / квадрату - 4.

Для тому для його визначення знадобиться 4 (тетраедр) або більше точок, але при цьому зберігається «вкладання» точок до третього виміру (3D).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.