Tutorial de Numpy - NumPy Multidimensional Array-ndarray

Jinku Hu 30 enero 2023
  1. Definición de ndarray
  2. Atributos del ndarray
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.

  1. Sólo puede almacenar elementos del mismo tipo
  2. 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.
  3. 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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