🔢 NumPy Cheatsheet Completo 🔢

NumPy es la librería esencial para la computación científica en Python. Ofrece un objeto de matriz multidimensional (ndarray) y funciones para operar con estas matrices de forma eficiente.


1. 🌟 Conceptos Clave


2. 🛠️ Configuración Inicial

  1. Instalación:
    pip install numpy
    # o
    conda install numpy # Si usas Anaconda
  2. Importación:
    import numpy as np # La convención estándar

3. 🚀 Creación de Arrays (ndarrays)

3.1. Desde Listas de Python

import numpy as np

arr1d = np.array([1, 2, 3])                 # Array 1D
arr2d = np.array([[1, 2, 3], [4, 5, 6]])   # Array 2D (Matriz)
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # Array 3D

3.2. Arrays con Valores Iniciales Específicos

3.3. Arrays con Rangos de Valores


4. ℹ️ Atributos del Array

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.ndim)   # 2 (Número de dimensiones)
print(arr.shape)  # (2, 3) (Tupla de dimensiones: filas, columnas)
print(arr.size)   # 6 (Número total de elementos)
print(arr.dtype)  # int64 (Tipo de datos de los elementos)
print(arr.itemsize) # 8 (Tamaño en bytes de cada elemento)

5. 🔎 Indexación y Slicing

5.1. Indexación Básica (Acceso por Posición)

arr = np.array([10, 20, 30, 40, 50])
print(arr[0])     # 10
print(arr[-1])    # 50

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[0, 0])  # 1 (fila 0, columna 0)
print(arr2d[1, 2])  # 6 (fila 1, columna 2)

5.2. Slicing (Rebanado)

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(arr[2:7])      # [2, 3, 4, 5, 6]
print(arr[:5])       # [0, 1, 2, 3, 4]
print(arr[7:])       # [7, 8, 9]
print(arr[::2])      # [0, 2, 4, 6, 8] (cada 2 elementos)
print(arr[::-1])     # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (invertido)

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[:, 1])   # [2, 5, 8] (todas las filas, columna 1)
print(arr2d[0:2, :]) # [[1, 2, 3], [4, 5, 6]] (filas 0 y 1, todas las columnas)
print(arr2d[::, ::-1]) # Todas las filas, columnas invertidas

5.3. Indexación Booleana

arr = np.array([1, 2, 3, 4, 5, 6])
mask = (arr > 3) # [False, False, False, True, True, True]
print(arr[mask]) # [4, 5, 6]
print(arr[arr % 2 == 0]) # [2, 4, 6] (solo los pares)

5.4. Indexación “Fancy”

arr = np.array([10, 20, 30, 40, 50])
indices = [0, 2, 4]
print(arr[indices]) # [10, 30, 50]

arr2d = np.array([[1, 2], [3, 4], [5, 6]])
rows = np.array([0, 2])
cols = np.array([1, 0])
print(arr2d[rows, cols]) # [2, 5] (selecciona (0,1) y (2,0))

6. ➕ Operaciones con Arrays

6.1. Operaciones Aritméticas Elemento a Elemento

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(a + b)     # [5, 7, 9]
print(a * 2)     # [2, 4, 6]
print(a / b)     # [0.25, 0.4, 0.5]
print(a ** 2)    # [1, 4, 9]

6.2. Funciones Universales (ufuncs)

arr = np.array([1, 4, 9])
print(np.sqrt(arr))  # [1., 2., 3.]
print(np.exp(arr))   # [2.718..., 54.598..., 8103.08...]

6.3. Agregaciones (Funciones Reductoras)

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(np.sum(arr))       # 21 (suma de todos los elementos)
print(arr.sum())         # 21 (método del array)
print(arr.sum(axis=0))   # [5, 7, 9] (suma por columnas)
print(arr.sum(axis=1))   # [6, 15] (suma por filas)

print(np.min(arr))       # 1
print(np.max(arr))       # 6
print(np.mean(arr))      # 3.5 (promedio)
print(np.std(arr))       # Desviación estándar
print(np.argmin(arr))    # 0 (índice del mínimo global, aplanado)
print(np.argmax(arr, axis=1)) # [2, 2] (índice del máximo por fila)

7. 📏 Reshaping y Reorganización


8. 📊 Combinación y División de Arrays

8.1. Combinación (Concatenación)

8.2. División


9. 📐 Álgebra Lineal

NumPy tiene un submódulo linalg para operaciones de álgebra lineal.

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# Producto punto de matrices (multiplicación matricial)
print(a @ b)         # Python 3.5+
print(np.dot(a, b))  # Equivalente
# [[19, 22], [43, 50]]

# Inversa de una matriz
print(np.linalg.inv(a))
# [[-2., 1.], [1.5, -0.5]]

# Determinante de una matriz
print(np.linalg.det(a)) # -2.0

# Valores propios y vectores propios
eigenvalues, eigenvectors = np.linalg.eig(a)
print("Valores propios:", eigenvalues)
print("Vectores propios:", eigenvectors)

# Producto cruz (solo para 3D)
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
print(np.cross(v1, v2)) # [-3, 6, -3]

10. 🎲 Generación de Números Aleatorios

El submódulo np.random es para esto.

# Semilla para reproducibilidad
np.random.seed(42)

# Números flotantes uniformemente distribuidos entre 0.0 y 1.0
print(np.random.rand(3))        # [0.374..., 0.950..., 0.731...] (1D)
print(np.random.rand(2, 2))     # [[..., ...], [..., ...]] (2D)

# Números flotantes de una distribución normal estándar (media 0, varianza 1)
print(np.random.randn(3))       # [0.496..., -0.119..., 0.671...]

# Enteros aleatorios en un rango [low, high)
print(np.random.randint(low=0, high=10, size=5)) # 5 enteros entre 0 y 9

# Selección aleatoria de elementos de un array
elements = [1, 2, 3, 4, 5]
print(np.random.choice(elements, size=3, replace=False)) # 3 elementos únicos

11. 💾 Entrada/Salida (File I/O)

11.1. Guardar y Cargar Arrays Binarios (.npy, .npz)

my_array = np.array([1, 2, 3, 4, 5])
np.save('my_array.npy', my_array)
loaded_array = np.load('my_array.npy')
print(loaded_array)

# Borrar archivos (para cleanup si es un script)
# import os
# os.remove('my_array.npy')

11.2. Guardar y Cargar desde Archivos de Texto (.txt, .csv)

data = np.array([[1.1, 2.2], [3.3, 4.4]])
np.savetxt('data.csv', data, delimiter=',', fmt='%.1f')
loaded_data = np.loadtxt('data.csv', delimiter=',')
print(loaded_data)

12. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una referencia completa y concisa de NumPy, cubriendo sus conceptos esenciales, la creación y manipulación de arrays, operaciones clave de álgebra lineal y generación de números aleatorios. Es una herramienta fundamental para cualquier trabajo con datos numéricos en Python.