Python NumPy en la práctica: el código y los comandos que realmente importan

Python NumPy : lo esencial en un artículo — código real, diagramas y pasos concretos, extractos de un curso de 35 lecciones.

Python NumPy en la práctica: el código y los comandos que realmente importan

Sin teoría interminable aquí: abrimos la terminal y practicamos. Aquí lo esencial de Python NumPy, extraído directamente de un curso completo de 35 lecciones — con código real que puedes copiar y pegar ahora.

tl;dr
  • Introducción e Instalación
  • Creación e inspección de arrays
  • Indexación, slicing y fancy indexing
  • Operaciones vectorizadas
  • Broadcasting
~$ cat ./parcours.md # Python NumPy — 10 capítulos
01
Introducción e Instalación
→ Presentación del curso→ Instalar NumPy y el entorno+ 1 más lecciones
02
Creación e inspección de arrays
→ Crear arrays→ Inspeccionar shape, dtype, ndim+ 1 más lecciones
03
Indexación slicing y fancy indexing
→ Indexación básica→ Slicing multidimensional+ 1 más lecciones
04
Operaciones vectorizadas
→ ¿Por qué vectorizar?→ Operaciones element-wise+ 1 más lecciones
05
Broadcasting
→ Las reglas del broadcasting→ Broadcasting en práctica+ 1 más lecciones
06
Álgebra lineal
→ Producto matricial→ Transpuesta, inversa, determinante+ 1 más lecciones
07
Estadísticas con NumPy
→ Media, mediana, desviación estándar→ Percentiles y cuantiles+ 1 más lecciones
08
Generación de números aleatorios
→ numpy.random.default_rng→ Distribuciones estadísticas+ 1 más lecciones
🏁
Proyecto final (+ 2 capítulos en camino)
→ Te vas con un proyecto concreto y demostrable

Crear arrays

NOTEObjetivo — Descubrir todas las fábricas de arrays integradas en NumPy. En lugar de escribir listas Python a mano, aprendemos a generar arrays de cualquier forma con valores predefinidos: ceros, unos, rangos numéricos, matrices identidad…

Objetivos pedagógicos

TIPAl finalizar este módulo — Sabrás elegir la fábrica correcta para cada necesidad: inicializar una matriz de pesos en una red neuronal, crear un eje temporal para un gráfico, generar una máscara llena de 1, etc. Estas funciones aparecen todos los días en ciencia de datos.

¿Por qué no siempre np.array()?

Podríamos escribir siempre np.array([0,0,0,0,0,0,0,0,0,0]). Pero imagina ahora que necesitas un array de 1 000 000 ceros: imposible teclearlo a mano.

Afortunadamente, NumPy ofrece fábricas especializadas para estos casos recurrentes. Son más rápidas, más legibles y más seguras que un bucle Python.

np.zeros : una tabla de ceros

La herramienta n.º 1 para inicializar un array. Se pasa como argumento la shape deseada:

output
import numpy as np

# Vector de 5 ceros
a = np.zeros(5)
print(a)
# [0. 0. 0. 0. 0.]

# Matriz 3 x 4 de ceros
b = np.zeros((3, 4))
print(b)
# [[0. 0. 0. 0.]
#  [0. 0. 0. 0.]
#  [0. 0. 0. 0.]]

# Cubo 2 x 3 x 4 (¡un tensor 3D!)
c = np.zeros((2, 3, 4))
print(c.shape)
# (2, 3, 4)
WARNINGAtención al paréntesis — Para dimensiones múltiples hay que pasar una tupla: np.zeros((3, 4)) y no np.zeros(3, 4). Es el error n.º 1 de los principiantes.

np.ones : una tabla de unos

Idéntico a zeros, pero lleno de 1. Muy útil como máscara o como punto de partida para matrices de pesos.

output
import numpy as np

# Vector de pesos inicializados a 1
poids = np.ones(10)
print(poids)
# [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

# Matriz cuadrada 3 x 3 de unos
M = np.ones((3, 3), dtype=int)
print(M)
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

Observa el parámetro dtype=int: por defecto, zeros y ones producen float64. Si quieres enteros, solicítalo explícitamente.

np.full : rellenar con cualquier valor

Cuando quieras rellenar con un valor distinto de 0 o 1, usa np.full(shape, valor):

output
import numpy as np

# Matriz 2x3 rellena de 7
sept = np.full((2, 3), 7)
print(sept)
# [[7 7 7]
#  [7 7 7]]

# Tabla de NaN (valor faltante)
nan_arr = np.full(5, np.nan)
print(nan_arr)
# [nan nan nan nan nan]

Caso práctico frecuente: inicializar una tabla de resultados a NaN y luego rellenar celda por celda durante un cálculo.

np.arange : la versión « range » de NumPy

np.arange(start, stop, step) es el equivalente NumPy de la función range de Python, pero devuelve un ndarray:

output
import numpy as np

# 0, 1, 2, ..., 9 (stop está excluido)
a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]

# De 5 a 20 (excluido), con paso de 2
b = np.arange(5, 20, 2)
print(b)
# [ 5  7  9 11 13 15 17 19]

# Con paso flotante: posible pero mejor evitarlo
c = np.arange(0, 1, 0.1)
print(c)
# [0.  0.1 0.2 ... 0.9] (pero cuidado, ver warning)
WARNINGTrampa clásica — Con un paso flotante (0.1, 0.01…), arange puede producir un número de elementos distinto al esperado por errores de redondeo binario. Prefiere np.linspace para pasos no enteros.

np.linspace : N puntos regularmente espaciados

np.linspace(start, stop, num) devuelve num puntos regularmente espaciados entre start y stop, incluyendo ambos extremos:

output
import numpy as np

# 11 puntos de 0 a 1 inclusive
a = np.linspace(0, 1, 11)
print(a)
# [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]

# 5 puntos entre -pi y +pi (ideal para graficar sin/cos)
x = np.linspace(-np.pi, np.pi, 5)
print(x)
# [-3.14 -1.57  0.    1.57  3.14]

# 1000 puntos para un trazado suave
t = np.linspace(0, 10, 1000)

linspace es imprescindible para trazar curvas matemáticas con Matplotlib. Es la herramienta n.º 1 para crear ejes continuos.

Indexación básica

NOTEObjetivo — Aprender a acceder con precisión a cualquier elemento de un array: un solo escalar, una fila completa, una columna completa o un subarray. Es una de las competencias más usadas a diario.

Objetivos pedagógicos

TIPAl finalizar este módulo — Sabrás extraer un elemento único, una fila o una columna de una matriz, usar índices negativos para partir del final y modificar valores específicos con una asignación.

Indexación 1D : como una lista Python

Para un array 1D, la indexación es idéntica a una lista Python. El primer elemento tiene el índice 0.

output
import numpy as np

notes = np.array([12, 15, 17, 9, 18, 14])

print(notes[0])     # 12 (primera nota)
print(notes[2])     # 17 (tercera nota)
print(notes[5])     # 14 (última nota)

El tipo devuelto es un escalar NumPy, no un array. Puedes usarlo como un número Python normal.

Índices negativos : desde el final

Como en Python, -1 designa el último elemento, -2 el penúltimo, etc.

output
import numpy as np

notes = np.array([12, 15, 17, 9, 18, 14])

print(notes[-1])    # 14  (última)
print(notes[-2])    # 18  (penúltima)
print(notes[-6])    # 12  (la primera, desde el final)
TIPTrucoarr[-1] es un atajo muy usado para acceder al último valor, sin necesidad de calcular arr[len(arr)-1].

Indexación 2D : fila y columna

Para una matriz se necesitan dos índices: arr[i, j]. Es la convención de NumPy, mucho más clara que arr[i][j] de Python.

output
import numpy as np

bulletin = np.array([
    [14, 15, 12],   # alumno 0
    [18, 11, 17],   # alumno 1
    [9, 10, 8],     # alumno 2
    [16, 19, 14],   # alumno 3
])

# Nota del alumno 1 en la materia 2 (inglés)
print(bulletin[1, 2])    # 17

# El alumno 3 en matemáticas (columna 0)
print(bulletin[3, 0])    # 16
WARNINGarr[i, j] y no arr[i][j] — Ambos funcionan, pero arr[i, j] es más rápido y más idiomático. arr[i][j] crea primero la fila i (un subarray) y luego toma el elemento j; son dos operaciones en lugar de una.

Extraer una fila completa

Con un solo índice se recupera toda la fila:

output
import numpy as np

bulletin = np.array([
    [14, 15, 12],
    [18, 11, 17],
    [9, 10, 8],
    [16, 19, 14],
])

eleve1 = bulletin[1]
print(eleve1)              # [18 11 17]
print(eleve1.shape)        # (3,)

# Equivalente explícito con slice:
print(bulletin[1, :])      # [18 11 17]

Ambas sintaxis bulletin[1] y bulletin[1, :] son equivalentes. La forma con : es más explícita: « fila 1, todas las columnas ».

Extraer una columna completa

Para la columna es OBLIGATORIO usar la sintaxis bidimensional:

output
import numpy as np

bulletin = np.array([
    [14, 15, 12],
    [18, 11, 17],
    [9, 10, 8],
    [16, 19, 14],
])

# Todas las notas de matemáticas (columna 0)
math = bulletin[:, 0]
print(math)               # [14 18  9 16]

# Media por materia
print("Media math :", bulletin[:, 0].mean())
print("Media franc :", bulletin[:, 1].mean())
print("Media anglais :", bulletin[:, 2].mean())
WARNINGError frecuentebulletin[, 0] no es válido en Python. La coma necesita un miembro a la izquierda. Usa siempre bulletin[:, 0].

Modificar un valor por asignación

La indexación también funciona en escritura. Puedes modificar un elemento, una fila completa o una columna:

output
import numpy as np

bulletin = np.array([
    [14, 15, 12],
    [18, 11, 17],
    [9, 10, 8],
])

# Modificar una sola celda
bulletin[0, 1] = 16
print(bulletin[0])
# [14 16 12]

# Reemplazar toda la fila 2
bulletin[2] = [11, 12, 13]
print(bulletin)
# [[14 16 12]
#  [18 11 17]
#  [11 12 13]]

# Poner una columna entera a cero
bulletin[:, 2] = 0
print(bulletin)
# [[14 16  0]
#  [18 11  0]
#  [11 12  0]]

Instalar NumPy y el entorno

NOTEObjetivo — Configurar un entorno Python limpio, instalar NumPy y verificar que todo funciona. Veremos los dos métodos principales: pip (el gestor estándar) y conda (la distribución Anaconda, muy popular en ciencia de datos).

Objetivos pedagógicos

TIPAl finalizar este módulo — Tendrás Python instalado, un entorno virtual creado, NumPy instalado, Jupyter Notebook funcional y la confirmación de que tu configuración está lista para el resto del curso.

Verificar Python en tu máquina

NumPy requiere Python 3.9 o superior. Para comprobar tu versión, abre una terminal y escribe:

output
# Windows (PowerShell o cmd)
python --version

# macOS / Linux
python3 --version

# Salida esperada (ejemplo):
# Python 3.12.4

Si Python no está instalado, descárgalo desde el sitio oficial python.org/downloads. En Windows, marca la casilla « Add Python to PATH » durante la instalación.

WARNINGAtención — Python 2 está obsoleto — Si tu comando python responde « Python 2.7… », usa python3 o instala una versión reciente. NumPy moderno ya no soporta Python 2 desde 2020.

¿Por qué un entorno virtual?

Un entorno virtual es una carpeta aislada que contiene su propia copia de Python y sus propias bibliotecas. Permite tener un proyecto con NumPy 1.26 y otro con NumPy 2.0 sin que se interfieran.

Sin entorno virtual

Con entorno virtual

Método 1 : pip + venv (Python estándar)

Es el método oficial, ligero e integrado en Python. Crea una carpeta de proyecto y abre una terminal dentro:

output
# 1. Crear un entorno virtual llamado "venv"
python -m venv venv

# 2. Activar el entorno
# Windows PowerShell :
venv\Scripts\Activate.ps1

# macOS / Linux :
source venv/bin/activate

# 3. Instalar NumPy
pip install numpy

# 4. (Opcional) Instalar también Jupyter y matplotlib
pip install jupyter matplotlib pillow

Una vez activado, tu prompt muestra (venv) delante. Es la señal de que estás trabajando en tu burbuja aislada.

Método 2 : Anaconda / Miniconda

Anaconda es una distribución científica de Python que ya trae instaladas las principales bibliotecas de ciencia de datos: NumPy, Pandas, scikit-learn, Jupyter, etc. Es muy práctico para principiantes.

output
# 1. Descargar Anaconda desde anaconda.com/download
# 2. Ejecutar el instalador gráfico
# 3. Una vez instalado, abrir el Anaconda Prompt

# Verificar la versión de NumPy incluida
conda list numpy

# Crear un entorno dedicado al curso
conda create -n cours-numpy python=3.12 numpy jupyter matplotlib pillow

# Activar
conda activate cours-numpy

Si solo quieres lo estrictamente necesario, elige Miniconda, una versión ligera (~50 MB) en lugar de Anaconda (~3 GB).

pip vs conda : ¿qué elegir?

Criterio pip + venv conda
Público objetivo Desarrolladores Python Científicos de datos, estudiantes
Tamaño inicial Muy ligero Más pesado (sobre todo Anaconda)
Bibliotecas preinstaladas Ninguna Ya toda la suite de ciencia de datos
Velocidad de instalación Muy rápida para NumPy Más lenta pero resuelve mejor las dependencias
Bibliotecas C completas A veces complicado (OpenCV, etc.) Siempre funcional
Recomendación curso OK si ya conoces Python Recomendado para principiantes
TIPNuestra recomendación — Si es tu primer contacto con la ciencia de datos, instala Anaconda. Tendrás NumPy, Pandas, scikit-learn, Jupyter y todo lo necesario en un solo comando, sin pelearte con compiladores C ni variables de entorno.

Verificar que NumPy funciona

Una vez instalado, abre un intérprete Python (escribiendo python en la terminal) y teclea:

output
import numpy as np

# Verificar la versión
print(np.__version__)
# Salida esperada (por ejemplo): 2.1.0

# Crear un primer array
a = np.array([1, 2, 3, 4, 5])
print(a)
print("Tipo :", type(a))
print("Forma :", a.shape)
print("Tipo de los elementos :", a.dtype)
va-plus-loin

Este artículo cubre los extractos más útiles — el curso completo Python NumPy (11 capítulos, 35 lecciones, ejercicios corregidos y proyecto final) te lleva hasta el final.

./acceder-al-curso-completo curso gratuito : Dominar Claude Code

FAQ

¿Cuánto tiempo se necesita para aprender Python NumPy?
Con una progresión estructurada (11 capítulos, 35 lecciones cortas y prácticas), se alcanza un nivel operativo en unas semanas dedicando 30 a 60 minutos al día. Lo importante es practicar cada concepto de inmediato.
¿Se necesitan requisitos previos?
Con nociones básicas de informática basta. Si sabes usar una terminal y leer código sencillo, estás listo.
¿Por dónde empezar concretamente?
Reproduce los comandos de este artículo y sigue el curso completo Python NumPy: encadena las 35 lecciones en orden, con ejercicios y proyecto final.

📬 ¿Quieres recibir este tipo de guía cada semana? Suscríbete gratis — código real, cero palabrería.