Menu
CoddyTech

Hoja de Trucos de NumPy

Última actualización

Crear arrays

Un array guarda valores de un solo tipo en una cuadrícula con cualquier número de dimensiones.

TareaCódigo
Importar NumPyimport numpy as np
Desde una listanp.array([1, 2, 3])
2D desde listas anidadasnp.array([[1, 2, 3], [4, 5, 6]])
Ceros, unos, un valor de rellenonp.zeros((2, 3)), np.ones(4), np.full((2, 2), 7)
Rango con paso (sin el final)np.arange(0, 10, 2) # [0 2 4 6 8]
n puntos equiespaciados (con el final)np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1.]
Matriz identidadnp.eye(3)
Misma forma que otro arraynp.zeros_like(m), np.ones_like(m)
Elegir el tipo de elementonp.array([1, 2, 3], dtype=np.float32)
Mallas de coordenadasxx, yy = np.meshgrid(np.arange(3), np.arange(2))

Inspeccionar un array

TareaCódigo
Shape: tamaño de cada dimensiónm.shape # (3, 4)
Número de dimensionesm.ndim # 2
Número de elementosm.size # 12
Tipo de elementom.dtype # int64
Convertir el tipom.astype(np.float64)
Longitud de la primera dimensiónlen(m) # 3
Volver a una lista de Pythonm.tolist()
Mostrar menos decimalesnp.set_printoptions(precision=3, suppress=True)

Indexar y hacer slicing

Los slices son vistas: comparten memoria con el array original. Las máscaras y las listas de índices devuelven copias.

TareaCódigo
Primer y último elementoa[0], a[-1]
Slice start:stop (sin stop)a[1:4] # [20 30 40]
Uno de cada dos, al revésa[::2], a[::-1]
Un elemento de un array 2Dm[1, 2] # 6
Una fila, una columnam[0], m[:, 1]
Un bloque de filas y columnasm[:2, 1:3]
Elementos que cumplen una condicióna[a > 25] # [30 40 50]
Combinar condicionesa[(a > 15) & (a < 45)]
Elegir por una lista de posicionesa[[0, 2, 4]]
Posiciones que cumplennp.flatnonzero(a > 25) # [2 3 4]
Elegir elemento a elementonp.where(a > 25, a, 0)
Copiar antes de modificar un slicepart = a[1:3].copy()
Asignar valores con una máscaraa[a > 40] = 0

Operaciones y broadcasting

Los operadores trabajan elemento a elemento. El broadcasting estira un escalar, una fila o una columna hasta la forma del otro array.

TareaCódigo
Aritmética elemento a elementox + y, x - y, x * y, x / y, x ** 2
Con un escalarx * 10
Raíz cuadrada, exponencial, logaritmonp.sqrt(x), np.exp(x), np.log(x)
Valor absoluto, redondeonp.abs(x - 5), np.round(x / 3, 2)
Limitar valores a un rangonp.clip(x, 2, 8)
Máximo elemento a elementonp.maximum(x, 3)
Producto escalarx @ y # 37.0
Centrar cada columna (broadcast de una fila)m - m.mean(axis=0)
Escalar cada fila (broadcast de una columna)m / m.sum(axis=1, keepdims=True)
Comparar floats con seguridadnp.isclose(0.1 + 0.2, 0.3) # True, np.allclose(x, y)
Trigonometría y pinp.sin(np.pi / 2) # 1.0

Agregar a lo largo de un eje

axis=0 recorre las filas hacia abajo y da un resultado por columna. axis=1 recorre las columnas y da un resultado por fila.

TareaCódigo
Suma de todos los elementosm.sum() # 21
Un resultado por columnam.sum(axis=0) # [5 7 9]
Un resultado por filam.sum(axis=1) # [ 6 15]
Media y desviación estándarm.mean(), m.std(), m.mean(axis=0)
Mínimo, máximom.min(), m.max(axis=1)
Posición del máximom.argmax(), m.argmax(axis=1)
Mediana y percentilesnp.median(m), np.percentile(m, [25, 50, 75])
Suma acumuladanp.cumsum(m, axis=1)
Producto de todos los elementosm.prod() # 720
Alguno, todos, contar(m > 4).any(), (m > 0).all(), np.count_nonzero(m > 2)

Cambiar de forma y combinar

Un reshape conserva los elementos y cambia la forma, así que el tamaño total debe ser el mismo.

TareaCódigo
Nueva formaa.reshape(2, 3)
Dejar que NumPy calcule un tamañoa.reshape(3, -1), a.reshape(-1, 1)
Aplanar a 1Dm.ravel(), m.flatten()
Transponerm.T
Añadir una dimensióna[:, np.newaxis], np.expand_dims(a, axis=0)
Quitar dimensiones de tamaño 1np.squeeze(np.ones((1, 3, 1)))
Unir a lo largo de un eje existentenp.concatenate([a, a])
Apilar filas o columnasnp.vstack([m, m]), np.hstack([m, m])
Arrays 1D como columnasnp.column_stack([a, a ** 2])
Apilar en un eje nuevonp.stack([a, a], axis=0) # shape (2, 6)
Dividir en trozosnp.split(a, 3), np.array_split(a, 4)
Repetir o replicar en mosaiconp.repeat([1, 2], 2) # [1 1 2 2], np.tile([1, 2], 2) # [1 2 1 2]

Ordenar, buscar y valores únicos

TareaCódigo
Copia ordenadanp.sort(a)
De mayor a menornp.sort(a)[::-1]
Posiciones que ordenarían el arraynp.argsort(a)
Los tres valores más grandesnp.sort(a)[-3:]
Valores únicos y sus conteosvalues, counts = np.unique(a, return_counts=True)
Nombres de NumPy 2 (unique_values puede no ordenar)np.unique_values(a), np.unique_counts(a)
¿Está cada elemento en una lista?np.isin(a, [1, 9])
Posición de inserción en un array ordenadonp.searchsorted([1, 3, 5, 7], 4) # 2
Operaciones de conjuntosnp.intersect1d(a, [1, 2, 10]), np.union1d(a, [10]), np.setdiff1d(a, [1])
Ordenar filas por una columnam[m[:, 1].argsort()]

Números aleatorios

Crea un Generator con semilla y saca todo de él, para que los resultados se repitan en cada ejecución.

TareaCódigo
Generador con semillarng = np.random.default_rng(42)
Floats en [0, 1)rng.random(3)
Enteros, sin el extremo superiorrng.integers(1, 7, size=10)
Distribución normalrng.normal(loc=0, scale=1, size=(2, 3))
Floats uniformes en un rangorng.uniform(5, 10, size=4)
Elegir de una listarng.choice(["a", "b", "c"], size=5)
Elegir sin repeticiónrng.choice(10, size=3, replace=False)
Elegir con pesosrng.choice(["H", "T"], size=10, p=[0.7, 0.3])
Copia barajada, barajar in siturng.permutation(a), rng.shuffle(a)
Conteos binomiales y de Poissonrng.binomial(10, 0.5, size=5), rng.poisson(3, size=5)

Álgebra lineal

TareaCódigo
Producto de matricesA @ A
Resolver Ax = bnp.linalg.solve(A, b) # [0.8 1.4]
Inversa y determinantenp.linalg.inv(A), np.linalg.det(A)
Norma de un vectornp.linalg.norm(b)
Autovalores y autovectoresvalues, vectors = np.linalg.eig(A)
Ajustar una rectaslope, intercept = np.polyfit(x, y, 1)
Producto exteriornp.outer([1, 2], [3, 4])
Diagonal y trazanp.diag(A), np.trace(A)

Valores faltantes y especiales

np.nan marca un float faltante. Cualquier operación con él da nan, así que usa las funciones nan o una máscara.

TareaCódigo
Valor faltantenp.nan
Encontrar valores faltantesnp.isnan(v), np.isnan(v).sum()
Eliminar valores faltantesv[~np.isnan(v)]
Reemplazar faltantes e infinitosnp.nan_to_num(v, nan=0.0, posinf=0.0)
Comprobar infinitos y finitosnp.inf, np.isfinite(v)
Estadísticas que ignoran NaNnp.nanmean(v[:3]) # 2.0, np.nanmax(v)

Guardar y cargar

TareaCódigo
Un array, archivo binarionp.save("data.npy", m), m = np.load("data.npy")
Varios arrays en un archivonp.savez("data.npz", x=x, y=y), np.load("data.npz")["x"]
Escribir texto CSVnp.savetxt("data.csv", m, delimiter=",", fmt="%d")
Leer texto CSVnp.loadtxt("data.csv", delimiter=",")

NumPy 2: nombres antiguos y qué escribir ahora

NumPy 2 eliminó muchos alias, así que el código copiado de tutoriales antiguos puede fallar con un AttributeError.

TareaNumPy 2Forma antigua
Valor faltantenp.nannp.NaN
Infinitonp.infnp.Inf
Tipo float de 64 bitsnp.float64np.float_
Área bajo una curvanp.trapezoid(y, x)np.trapz(y, x)
¿Está cada elemento en otro array?np.isin(a, b)np.in1d(a, b)
Apilar filasnp.vstack([a, a])np.row_stack([a, a])
Productonp.prod(a)np.product(a)
Números aleatoriosrng = np.random.default_rng(0) rng.random(3)np.random.seed(0) np.random.rand(3)

Las llamadas de NumPy sobre las que se construye el código de ciencia de datos, ordenadas por tarea: crear arrays, inspeccionarlos, indexar y hacer slicing, operar elemento a elemento, agregar a lo largo de un eje, cambiar de forma y combinar, ordenar y buscar, generar números aleatorios y resolver álgebra lineal. Cada fila es un fragmento corto que puedes pegar, con una línea que explica qué hace.

Todo está escrito para NumPy 2, la versión que usa Coddy, y la última tabla recoge los nombres que NumPy 2 eliminó, junto a lo que debes escribir en su lugar. La mayoría de los ejemplos usan a = np.array([3, 1, 4, 1, 5, 9, 2, 6]) y m = np.arange(12).reshape(3, 4). ¿Empiezas con Python? Arranca por la hoja de trucos de Python y el playground de Python, y ten a mano las hojas de trucos de pandas, Matplotlib y scikit-learn junto a esta.

Preguntas frecuentes sobre la hoja de trucos de NumPy

¿Esta hoja de trucos de NumPy es gratis?
Sí. Esta hoja de trucos de NumPy es totalmente gratis y no necesitas registrarte. Guárdala en marcadores o imprímela en PDF desde tu navegador, y vuelve cuando necesites la llamada exacta para un reshape, una suma por eje o un número aleatorio.
¿Qué versión de NumPy cubre esta hoja de trucos?
NumPy 2. Todos los fragmentos funcionan en NumPy 2.4, la versión que usa Coddy. NumPy 2 eliminó alias como np.NaN, np.float_, np.trapz y np.in1d, así que la última tabla muestra cada uno junto a su nombre actual.
¿Qué significa axis=0 en NumPy?
El eje es la dimensión que se colapsa. En un array 2D, axis=0 recorre las filas hacia abajo, así que m.sum(axis=0) devuelve un total por columna. axis=1 recorre las columnas y devuelve un total por fila. Sin eje, la función usa todos los elementos.
¿Cuál es la diferencia entre una vista y una copia?
Un slice como a[1:3] es una vista: comparte memoria con a, así que modificar el slice modifica a. Las máscaras booleanas y las listas de índices como a[a > 2] o a[[0, 2]] devuelven copias. Llama a .copy() cuando necesites un array independiente.
¿Por qué usar un array de NumPy en vez de una lista de Python?
Los arrays guardan un solo tipo en un bloque de memoria, así que las operaciones sobre el array completo se ejecutan en código compilado y suelen ser muchas veces más rápidas que un bucle de Python. a * 2 duplica cada elemento, mientras que [1, 2] * 2 repite la lista. pandas y scikit-learn están construidos sobre arrays de NumPy.
¿Uso np.random.seed o default_rng?
Usa rng = np.random.default_rng(seed) y llama a los métodos de rng, como rng.normal() o rng.integers(). Es la API recomendada, con mejores secuencias aleatorias y sin estado global oculto. np.random.seed y np.random.rand siguen funcionando, pero son la interfaz heredada.
¿Puedo ejecutar código de NumPy online?
Sí. El playground de Matplotlib, gratuito, ejecuta Python con NumPy, pandas, Matplotlib y scikit-learn en tu navegador, así que puedes pegar cualquier fragmento de esta hoja de trucos y ejecutarlo sin instalar nada. El curso de Machine Learning de Coddy enseña NumPy paso a paso mientras trabajas con datos reales.
Ilustración de los lenguajes de programación de Coddy

Aprende NumPy con Coddy

COMENZAR