В Python NumPy что такое измерение и ось?
я кодирую с питонами NumPy
модуль. Если координаты точки в трехмерном пространстве описываются как [1, 2, 1]
, разве это не три измерения, три оси, ранг из трех? Или, если это одно измерение, то не должно ли это быть точками (множественное число), а не точкой?
вот документация:
в Numpy размеры называются осями. Количество осей-это ранг. Например, координаты точки в трехмерном пространстве [1, 2, 1] представляют собой массив ранга 1, поскольку он имеет одну ось. Эта ось имеет длину 3.
6 ответов:
в numpy
array
s, размерность относится к числуaxes
необходимо индексировать его, а не размерность любого геометрического пространства. Например, вы можете описать расположение точек в 3D пространстве с помощью 2D массива:array([[0, 0, 0], [1, 2, 3], [2, 2, 2], [9, 9, 9]])
имеющего
shape
на(4, 3)
и размером2
. Но он может описать 3D пространство, потому что длина каждой строки (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 # 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)
Он имеет ранг один, так как вам нужен один индекс для его индексирования. Что одна ось имеет длину 3, так как индекс индексирования может принимать три разных значения:
v[i], i=0..2
.
просто вставьте часть ответа из этого ответ:
В Numpy,измерение,оси/осей,формы связаны и иногда похожи понятия:
In [1]: import numpy as np In [2]: a = np.array([[1,2],[3,4]])
измерение
на Математика/Физика, размерность или размерность неофициально определяется как минимальное количество координат, необходимых для указания любой точки в пространстве. Но в включает в себя, согласно элемент numpy doc, это то же самое, что ось/оси:
в Numpy размеры называются осями. Количество осей-это ранг.
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension* Out[3]: 2
оси/осей
the nth координаты для индексирования
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
вы также можете использовать ось параметр в групповых операциях, в случае axis=0 Numpy выполняет действие над элементами каждого столбца, а если axis=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])
вот как я это понимаю. Точка-это 1D объект. Вы можете только определить его положение. У него нет размеров. Линия или поверхность-это двумерный объект. Вы можете определить его как по его положению, так и по длине или площади соответственно, например, прямоугольник, квадрат, круг Объем-это 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]]. Для поверхности просто потребуется больше точек для ее описания, но по-прежнему остается 2D-объект. Например, треугольнику потребуется 3 точки, А прямоугольнику/квадрату-4.
для определения объема потребуется 4 (тетраэдр) или более точек , но при этом сохраняется "вложенность" точек в третье измерение (3D).