Tutorial de Numpy - NumPy Multidimensional Array-ndarray
NumPy es una biblioteca que utiliza matrices multidimensionales como estructura básica de datos. La única estructura de datos en NumPy es ndarray
pero no el tipo de datos primitivo de Python list
data type, porque list
funciona relativamente despacio.
Después de que hayas aprendido ndarray
que es la piedra angular de NumPy, entenderás por qué NumPy puede lograr una computación de alta velocidad.
Definición de ndarray
ndarray
es la abreviatura de n-dimension array, o en otras palabras - matrices multidimensionales. La ndarray
es un objeto de array que representa un array multidimensional y homogénea de elementos de tamaño fijo.
Las dimensiones y el número de elementos están definidos por la forma, es decir, una tupla de N números enteros que representa el número de elementos en cada dimensión. El tipo de elemento en el array se define por dtype
- objeto de tipo dato
.
Expliquemos las frases anteriores en lenguaje sencillo. Todos los elementos almacenados en el objeto ndarray
deben tener el mismo tipo y tamaño de datos.
Las características del tipo de datos ndray
se resumen de la siguiente manera.
- Sólo puede almacenar elementos del mismo tipo
- La cantidad de datos en cada dimensión debe ser la misma, por ejemplo el 2D
ndarray
debe tener la misma cantidad de elementos en cada columna, y por supuesto también en cada fila. - Está escrito en lenguaje C y podría ejecutar la operación del array de forma óptima.
Atributos del ndarray
Vamos a enumerar los atributos de ndarray
.
Atributos | Descripción |
---|---|
T |
Transponer el array. Cuando el array es 1 D, se devuelve el array original. |
data |
Un objeto de búfer de Python que apunta a la posición inicial de los datos en el array. |
dtype |
El tipo de datos del elemento contenido en el ndarray. |
flags |
Información sobre cómo almacenar los datos del ndarray en la memoria (disposición de la memoria). |
flat |
Un iterador que convierte a Ndarray en un array unidimensional. |
imag |
La parte imaginaria de los datos del ndarray |
real |
Parte real de los datos del ndarray |
size |
El número de elementos contenidos en el ndarray. |
itemsize |
El tamaño de cada elemento en bytes. |
nbytes |
La memoria total (en bytes) ocupada por el ndarray. |
ndim |
El número de dimensiones contenidas en el ndarray. |
shape |
La forma del ndarray (los resultados son tuplas). |
strides |
El número de bytes necesarios para moverse al siguiente elemento adyacente en cada dirección de dimensión se representa por una tupla. |
ctypes |
Un iterador que se procesa en el módulo ctypes. |
base |
El objeto en el que se basa ndarray (qué memoria se está referenciando). |
Cuando accedes a los atributos de ndarray
, los datos de la instancia ndarray
no se modifican, aunque cuando usas .T
para obtener la transposición del objeto. Obtienes un nuevo objeto ndarray
pero no los datos originales modificados.
Veamos el significado específico de cada atributo a través de códigos de ejemplo.
>>> import numpy as np
>>> a = np.array([1, 2, 3])
Necesitamos importar la librería NumPy
y crear un nuevo array 1-D. Podríamos comprobar su tipo de datos y el tipo de datos de su elemento.
>>> type(a)
numpy.ndarray
>>> a.dtype
dtype('int32')
Vamos a crear una nueva matriz de 2 dimensiones y luego comprobar sus atributos.
>>> b = np.array([[4, 5, 6], [7, 8, 9]])
>>> b
array([[4, 5, 6],
[7, 8, 9]])
>>> b.T # get the transpose of b
array([[4, 7],
[5, 8],
[6, 9]])
>>> b # b keeps unmodified
array([[4, 5, 6],
[7, 8, 9]])
>>> a.size # a has 3 elements
3
>>> b.size # b has 6 elements
6
>>> a.itemsize # The size of element in a. The data type here is int64 - 8 bytes
8
>>> b.nbytes # check how many bytes in b. It is 48, where 6x8 = 48
48
>>> b.shape # The shape of b
(2, 3)
>>> b.dnim # The dimensions of b
2
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook