En numpy array
s, dimensionalidad se refiere al número de elementos axes
necesarios para indexarlo, no a la dimensionalidad de cualquier espacio geométrico. Por ejemplo, puede describir las ubicaciones de puntos en el espacio 3D con una matriz 2D:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
Que tiene shape
de (4, 3)
y dimensión 2
. Pero puede describir el espacio 3D porque la longitud de cada fila ( axis
1) es tres, por lo que cada fila puede ser el componente x, y, z de la ubicación de un punto. La longitud de axis
0 indica el número de puntos (aquí, 4). Sin embargo, eso es más una aplicación a las matemáticas que describe el código, no un atributo de la matriz en sí. En matemáticas, la dimensión de un vector sería su longitud (por ejemplo, componentes x, y, z de un vector 3d), pero en números, cualquier "vector" se considera realmente una matriz 1d de longitud variable. A la matriz no le importa cuál es la dimensión del espacio (si lo hay) que se describe.
Puede jugar con esto y ver el número de dimensiones y forma de una matriz así:
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)
Las matrices pueden tener muchas dimensiones, pero se vuelven difíciles de visualizar por encima de dos o tres:
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 de rango uno, ya que necesita un índice para indexarlo. Que tiene un eje de la longitud 3, ya que el índice de indexación puede tomar tres valores diferentes:
v[i], i=0..2
.fuente
Simplemente pegue parte de la respuesta de esta respuesta :
En Numpy, dimensión , eje / ejes , forma están relacionados y, a veces, conceptos similares:
In [1]: import numpy as np In [2]: a = np.array([[1,2],[3,4]])
dimensión
En Matemáticas / Física , la dimensión o dimensionalidad se define informalmente como el número mínimo de coordenadas necesarias para especificar cualquier punto dentro de un espacio. Pero en Numpy , de acuerdo con el documento numpy , es lo mismo que axis / axes:
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension* Out[3]: 2
eje / ejes
los enésima coordenada para indexar
array
en Numpy. Y las matrices multidimensionales pueden tener un índice por eje.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)
forma
describe cuántos datos a lo largo de cada eje disponible.
In [5]: a.shape Out[5]: (2, 2) # both the first and second axis have 2 (columns/rows/pages/blocks/...) data
fuente
También puede utilizar el parámetro de eje en operaciones de grupo, en el caso de eje = 0 Numpy realiza la acción en elementos de cada columna, y si eje = 1, realiza la acción en filas.
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])
fuente
Así es como lo entiendo. Un punto es un objeto 1D. Solo puede definir su posición. No tiene dimensiones. Una línea o superficie es un objeto 2D. Puede definirlo tanto por su posición como por su longitud o área respectivamente, por ejemplo, rectángulo, cuadrado, círculo. Un volumen es un objeto 3D. Puede definirlo por su posición, área de superficie / longitudes y volumen, por ejemplo, Esfera, Cubo.
A partir de esto, definirás un punto en NumPy por un solo eje (dimensión), independientemente del número de ejes matemáticos que uses. Para los ejes xey, un punto se define como [2,4], y para los ejes x, y y z, un punto se define como [2,4,6]. Ambos son puntos, por lo tanto 1D.
Para definir una línea, se necesitarán dos puntos. Esto requerirá alguna forma de "anidamiento" de los puntos en la segunda dimensión (2D). Como tal, una línea se puede definir usando xey solo como [[2,4], [6,9]] o usando x, y y z como [[2,4,6], [6,9,12 ]]. Para una superficie, simplemente requerirá más puntos para describirla, pero seguirá siendo un objeto 2D. Por ejemplo, un triángulo necesitará 3 puntos mientras que un rectángulo / cuadrado necesitará 4.
Un volumen requerirá 4 (un tetraedro) o más puntos para definirlo, pero aún manteniendo el 'anidamiento' de puntos en la tercera dimensión (3D).
fuente