title in python plot
En Python NumPy, ¿qué es una dimensión y un eje? (5)
Así es como lo entiendo. Un punto es un objeto 1D. Solo puedes 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, 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á un punto en NumPy por un solo eje (dimensión), independientemente de la cantidad de ejes matemáticos que utilice. 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 "anidación" de los puntos a la segunda dimensión (2D). Como tal, se puede definir una línea 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 sigue 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 mantiene el ''anidamiento'' de puntos a la tercera dimensión (3D).
Estoy codificando con el módulo Pythons NumPy
. Si las coordenadas de un punto en el espacio 3D se describen como [1, 2, 1]
, ¿no serían tres dimensiones, tres ejes, un rango de tres? O si esa es una dimensión, entonces ¿no deberían ser puntos (en plural), no puntos?
Aquí está la documentación:
En Numpy, las dimensiones se llaman ejes. La cantidad de ejes es rango. Por ejemplo, las coordenadas de un punto en el espacio 3D [1, 2, 1] son una matriz de rango 1, porque tiene un eje. Ese eje tiene una longitud de 3.
En numpy array
s, la dimensionalidad se refiere a la cantidad de axes
necesarios para indexarla, no a la dimensionalidad de ningún 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 y z de la ubicación de un punto. La longitud del axis
0 indica la cantidad de puntos (aquí, 4). Sin embargo, eso es más una aplicación a las matemáticas que el código está describiendo, no un atributo de la matriz en sí. En matemáticas, la dimensión de un vector sería su longitud (p. Ej., X, y, yz componentes de un vector 3d), pero en numpy, cualquier "vector" realmente solo se considera una matriz de 1d de longitud variable. Al conjunto no le importa cuál es la dimensión del espacio (si lo hay) que se describe.
Puedes jugar con esto y ver el número de dimensiones y la forma de una matriz como esta:
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)
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. Ese eje tiene la longitud 3, ya que la indexación del índice puede tomar tres valores diferentes: v[i], i=0..2
.
Solo pegue parte de la respuesta de esta answer :
En Numpy, la dimensión , los ejes / ejes , la 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 , 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:
En Numpy, las dimensiones se llaman ejes. La cantidad de ejes es rango.
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2
ejes / ejes
la enésima coordenada para indexar una 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
También puede usar el parámetro de eje en operaciones de grupo, en el caso de axis = 0 Numpy realiza la acción en elementos de cada columna, y si axis = 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])