Indexación y Remodelación de NumPy
La indexación selecciona y reorganiza datos de ndarray a lo largo de ejes; la remodelación cambia la forma sin cambiar los valores cuando el tamaño total se mantiene constante.
Busca en todas las páginas de la documentación
La indexación selecciona y reorganiza datos de ndarray a lo largo de ejes; la remodelación cambia la forma sin cambiar los valores cuando el tamaño total se mantiene constante.
Tarjeta de referencia rápida - lista para copiar y pegar.
import numpy as np
matrix = np.arange(12).reshape(3, 4)
rows = matrix[1:3, ::2] # selecciona filas 1-2, cada otra columna
cols = matrix[:, [0, 3]] # indexación avanzada de columnas 0 y 3
flat = matrix.reshape(-1) # vista 1-D cuando es posibleCuándo usar esto:
import numpy as np
# 4 regiones x 6 meses
sales = np.array(
[[10, 12, 11, 13, 14, 15],
[8, 9, 10, 9, 11, 12],
[20, 18, 19, 21, 22, 23],
[5, 6, 5, 7, 6, 8]],
dtype=np.int32,
)
# Solo Q1: meses 0-2, todas las regiones
q1 = sales[:, 0:3]
# Dos regiones principales por ventas totales
totals = sales.sum(axis=1)
top_idx = np.argsort(totals)[-2:]
top_regions = sales[top_idx]
# Apilar vectores de región como columnas para correlación
wide = sales.T # forma (6, 4) - meses como filas
# Marcar meses donde cualquier región superó 20
hot_months = np.where(sales.max(axis=0) >= 20)[0]
print("q1 shape:", q1.shape)
print("top regions:", top_idx)
print("hot months:", hot_months)Lo que esto demuestra:
inicio:fin en axis=1axis=1 y luego argsort para selección de filas.T (transpuesta) como atajo de remodelaciónnp.where en max(axis=0) para indexar columnas por condicióninicio:fin:paso) usa strides para producir una vista que comparte memoria.arr[mask] devuelve una selección 1-D.reshape devuelve una vista cuando los strides lo permiten; de lo contrario, copia.| Estilo | Ejemplo | ¿Copia? |
|---|---|---|
| Slice | a[2:5] | Generalmente vista |
| Lista de enteros | a[[1, 3]] | Copia |
| Máscara booleana | a[a > 0] | Copia |
np.take | np.take(a, idx, axis=0) | Configurable |
axis | Significado en 2-D |
|---|---|
0 | Hacia abajo por las filas (agrega columnas) |
1 | A través de las columnas (agrega filas) |
-1 | Última dimensión |
import numpy as np
# Insertar eje para broadcasting
row = np.array([1, 2, 3])
col = row[:, np.newaxis] # forma (3, 1)
# ravel vs flatten: flatten siempre copia
a = np.arange(6).reshape(2, 3)
flat_view = a.ravel()
flat_copy = a.flatten()a[[0, 1]] = 5 puede no comportarse como la asignación repetida de slices. Solución: asignar a .copy() o usar np.put.a[::-1] puede hacer que algunas remodelaciones copien inesperadamente. Solución: llamar a .copy() antes de extensiones C posteriores.a[mask] en 2-D necesita una forma de máscara (filas, columnas) o broadcastable. Solución: mask = mask & (a > 0) con formas alineadas.a[1:3] excluye el índice 3; a diferencia de range. Solución: recordar que el final es exclusivo.reshape(3, 5) en 12 elementos lanza un error. Solución: usar -1 para una dimensión inferida: reshape(3, -1).| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
np.einsum | Contracciones explícitas de tensores | Selecciones simples de filas/columnas |
pandas .loc | Filas/columnas etiquetadas | Kernels ndarray puramente numéricos |
np.take_along_axis | Ordenar valores por fila | Suficientes slices de matriz completa |
np.moveaxis | Reordenar tensores 3-D+ | .T simple en 2-D |
import numpy as np
a = np.arange(10)
every_other = a[::2]matrix.T o np.transpose(matrix) para 2-D.np.swapaxes(a, 0, 1) cuando el rango es > 2.np.prod(shape) == a.size.np.resize solo cuando quieras intencionalmente repetición o truncamiento.vol[z, y, x] - el eje más lento primero en orden C.a[5] en 2-D usa el índice ravel en orden C.a[row, col] o np.unravel_index para mayor claridad.a[mask, :] mantiene las columnas intactas.a[mask] solo aplana los elementos seleccionados a 1-D.a[..., 0] selecciona el índice 0 en el último eje, todos los ejes anteriores completos.np.stack añade un nuevo eje; np.concatenate une a lo largo de un eje existente.np.vstack / hstack son envoltorios de conveniencia.x[i][j] indexa dos veces y puede fallar en estructuras no cuadradas..loc / .ilocVersiones de Stack: 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: 16 jul 2026