Arrays de NumPy
Los objetos ndarray de NumPy almacenan datos numéricos homogéneos y exponen operaciones vectorizadas que reemplazan los lentos bucles de Python.
Busca en todas las páginas de la documentación
Los objetos ndarray de NumPy almacenan datos numéricos homogéneos y exponen operaciones vectorizadas que reemplazan los lentos bucles de Python.
Tarjeta de referencia rápida - lista para copiar y pegar.
import numpy as np
# Crear, convertir dtype, vectorizar
a = np.array([1, 2, 3], dtype=np.float64)
b = np.arange(3) # [0, 1, 2]
result = a * 2 + b # broadcasting + ufunc
print(result.shape, result.dtype)Cuándo usar esto:
import numpy as np
# Matriz de ingresos mensuales: filas = regiones, columnas = meses
revenue = np.array(
[[120_000, 135_000, 128_000],
[98_000, 102_000, 110_000],
[150_000, 148_000, 155_000]],
dtype=np.int64,
)
# Tasa de crecimiento por región frente al mes anterior (la columna 0 no tiene anterior)
growth = np.diff(revenue, axis=1) / revenue[:, :-1]
# Normalizar cada región a su propia media (broadcasting)
normalized = (revenue - revenue.mean(axis=1, keepdims=True)) / revenue.std(axis=1, keepdims=True)
# Enmascarar celdas de bajo rendimiento
threshold = revenue.mean()
under = np.where(revenue < threshold, revenue, 0)
print("forma de growth:", growth.shape)
print("media normalizada por fila:", normalized.mean(axis=1))
print("total de bajo rendimiento:", under.sum())Lo que esto demuestra:
dtype explícito para matemáticas enteras establesnp.diff a lo largo de axis=1 para el cambio mes a mes columna a columnakeepdims=True para que las estadísticas de fila se alineen con la forma de la matriznp.where como una condición vectorizada sin if de Python por celdandarray es un buffer contiguo más metadatos de forma/pasos - todos los elementos comparten un único dtype.arr.copy()) o provienen de asignaciones incompatibles.| Función | Uso Típico |
|---|---|
np.array | A partir de secuencias de Python |
np.arange / np.linspace | Rangos espaciados uniformemente |
np.zeros / np.ones / np.full | Buffers preasignados |
np.random.default_rng | Datos aleatorios reproducibles |
| dtype | Cuándo |
|---|---|
int32 / int64 | Conteos e IDs |
float32 | Características grandes de ML donde el compromiso de precisión está bien |
float64 | Precisión analítica predeterminada |
bool | Máscaras y predicados |
import numpy as np
# Prefiere dtype explícito al ingerir
ids = np.array(["1", "2", "3"], dtype=np.int64) # ValueError - convierte cadenas primero
# Usa default_rng, no el legado np.random.seed
rng = np.random.default_rng(42)
samples = rng.normal(0, 1, size=10_000)
# np.ndarray no es un reemplazo directo para list - .append no existenp.array - np.array([1, 2.5, 3]) se convierte en float64 y puede sorprender al código entero posterior. Solución: convierte explícitamente en la creación./ siempre promueve a flotante; // trunca hacia infinito negativo. Solución: usa np.floor_divide cuando necesites un truncamiento consistente.arr[[0, 2]]) devuelve una copia; los "slices" a menudo devuelven vistas. Solución: llama a .copy() antes de mutar los resultados filtrados.np.mean([1, np.nan, 3]) es NaN a menos que pases nanmean. Solución: usa np.nanmean o enmascara primero.(3, 4) + (4,) funciona; (3, 4) + (3,) lanza un error a menos que cambies la forma. Solución: alinea con arr[:, np.newaxis] o reshape.| Alternativa | Úsalo Cuando | No lo Uses Cuando |
|---|---|---|
| Listas de Python | Secuencias pequeñas, objetos heterogéneos | Transformaciones numéricas de un millón de elementos |
| Series de pandas | Datos 1-D etiquetados con valores faltantes | Álgebra lineal cruda en buffers sin etiquetas |
| Series de Polars | Pipelines columnares perezosos a escala | Solo necesitas una ufunc rápida de NumPy |
Módulo array (stdlib) | Arrays numéricos tipados sin dependencia de NumPy | Necesitas broadcasting o álgebra lineal |
np.broadcast_to(...).copy().float32 para tensores grandes donde ~7 dígitos decimales son suficientes.float64 para agregados financieros a menos que tengas una ganancia de memoria medida.import numpy as np
rng = np.random.default_rng(42)
rng.integers(0, 100, size=5)default_rng es la API moderna y estadísticamente más segura.int64 antes de sum: arr.astype(np.int64).sum().np.sum(arr, dtype=np.int64).np.str_ de ancho fijo, pero pandas/Polars manejan el texto mejor.(n,) en (n, m) necesita (n, 1).mask[:, np.newaxis] o np.broadcast_to.safe = arr[mask].copy()
safe *= 2 # no toca arr@ y np.dot son multiplicación de matrices.@ sigue las reglas de apilamiento de PEP 465 - prefiere @ por claridad.timeit en tamaños de array que procesas realmente.n pequeños cruzan el punto donde las listas de Python ganan debido a la sobrecarga de creación.Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026