Dominando NumPy: Guía Visual para Principiantes

Wilson Quispe
Escrito por:Wilson Quispe

NumPy es una librería de Python diseñada para trabajar con arreglos numéricos de forma rápida, eficiente y limpia.

Idea visual:

Piensa en NumPy como una calculadora matricial optimizada, mientras que las listas de Python son solo contenedores de datos.

Importar NumPy

import numpy as np

Usamos np solo para escribir menos y leer mejor el código.

Arrays vs Listas en Python

Creación de un array básico de 1 dimensión (vector)

# Lista normal en Python
lista_comun = [1, 2, 3]

# Arreglo de NumPy
arreglo_numpy = np.array([1, 2, 3])
print(arreglo_numpy)
RESULTADO: [1 2 3]

Diferencia clave:

  • Las listas son versátiles (pueden contener distintos tipos de datos).

  • Los arreglos de NumPy son homogéneos (todos los elementos del mismo tipo) y optimizados para cálculos matemáticos.

Visualización:

ejemplo-de-array-vs-list

Dimensiones y forma

Arreglo de 1 dimensión (vector)

a = np.array([1, 2, 3])
print("Dimensión:", a.ndim)  # ndim = número de dimensiones
print("Forma:", a.shape)     # shape = (elementos,)
Dimensión: 1
Forma: (3,)

Arreglo de 2 dimensiones (matriz)

b = np.array([[2, 4, 6],
              [4, 8, 12]])
print("Dimensión:", b.ndim)
print("Forma:", b.shape)    # (filas, columnas)
Dimensión: 2
Forma: (2, 3)

Visualización:

ejemplo-de-dimensiones

Tipos y explorando la forma

Es vital conocer la "forma" de nuestros datos para evitar errores en modelos de Machine Learning.

  • Shape: Indica el número de filas y columnas. Por ejemplo, (2, 3) significa 2 filas y 3 columnas.

  • Dtype: Indica el tipo de dato. NumPy es estricto: si mezclas enteros y flotantes, convertirá todo a flotante para mantener la consistencia.

c = np.array([10, 12.4, 14])  # Int + Float
print(c)
print("Tipo de dato:", c.dtype)
[10.  12.4 14. ]
Tipo de dato: float64

Creación de arreglos especiales

A menudo necesitamos inicializar matrices antes de llenarlas con datos reales, algo muy común en Deep Learning.

Matriz de ceros

zeros = np.zeros((3, 4))  # 3 filas, 4 columnas
print(zeros)
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

Matriz de unos

ones = np.ones((2, 3))  # 2 filas, 3 columnas
print(ones)
[[1. 1. 1.]
 [1. 1. 1.]]

Secuencias con arange() (como range() pero para arreglos)

Por ejemplo quiero un arreglo que empiece en 20, termine en 40 y que vaya avanzando de 5 en 5

# Crear un rango con pasos específicos (Inicio, Fin, Salto)
# Nota: El valor final nunca se incluye
secuencia = np.arange(20, 40, 5)
print(secuencia)
[20 25 30 35]

Valores espaciados uniformemente con linspace()

Tambien podemos crear un arreglo con una cantidad determinada y especificar el valor de inicio y el valor final

Ejemplo queremos un arreglo que vaya del 0 hasta el 10 (aleatoriamente) pero con un tamaño de 5

# Inicio, fin (inclusivo), número de elementos
valores = np.linspace(0, 10, 5)
print(valores)
[ 0.   2.5  5.   7.5 10. ]

Operaciones Matemáticas: ¿Por qué no usar Listas?

Aquí es donde NumPy brilla. Las listas de Python concatenan (pegan) los elementos al sumar, mientras que NumPy realiza operaciones elemento a elemento.

a = np.array([1, 2, 3])
c = np.array([10., 12.4, 14.])

print("Multiplicación:", a * c)
print("Suma:", a + c)
print("Resta:", a - c)
print("División:", a / c)
Multiplicación: [10.  24.8 42. ]
Suma: [11.  14.4 17. ]
Resta: [-9.  -10.4 -11. ]
División: [0.1        0.16129032 0.21428571]

Comparación con listas normales:

# En cambio, con listas:
list1 = [1, 2, 3]
list2 = [2, 4, 6]
print(list1 + list2) # Resultado: [1, 2, 3, 2, 4, 6] (¡Solo las pegó!)
Concatenación: [1, 2, 3, 2, 4, 6]

¡y si intentamos multiplicar las listas, no podremos hacerlo! Para solucionar esto podemos realizar un ciclo for y agregar unas lineas de codigo, sin embargo esto no es eficiente, y por eso usamos numpy

Visualización:

ejemplo-de-suma

Filtros y Operadores Booleanos

Podemos interrogar a nuestros datos de forma masiva sin usar ciclos for.

b = np.array([[2, 4, 6],
              [4, 8, 12]])

# Crear máscara booleana
mascara = b > 4
print("¿Mayores que 4?")
print(mascara)
¿Mayores que 4?
[[False False  True]
 [False  True  True]]

Visualización:

ejemplo-de-filtrado

Extraer solo los valores que cumplen la condición (Máscara booleana)

# Extraer valores que cumplen la condición
valores_filtrados = b[b > 4]
print("Valores > 4:", valores_filtrados)
Valores > 4: [ 6  8 12]

Encontrar múltiplos de 3

b[b % 3 == 0]
Multiplos de 3: [ 6  12]

Indexing y Slicing (Rebanado)

Acceder a la información es como dar coordenadas en un mapa. Para matrices: b[fila, columna]. Recuerda que en programación empezamos a contar desde 0.

Acceso Directo o por posición

# Matriz de ejemplo
matriz = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# Acceder a elemento: fila 1, columna 2 (0-indexed)
elemento = matriz[1, 2]
print("Elemento en [1, 2]:", elemento)
Elemento en [1, 2]: 6

Visualización:

ejemplo-de-index

Slicing (Cortes)

El slicing usa el formato [inicio : fin]. El "fin" es excluyente (no se incluye).

# Todos los elementos
print("Todo:", matriz[:])

# Desde la fila 1 hasta el final
print("Filas desde 1:", matriz[1:])

# Primera fila, todas las columnas
print("Primera fila:", matriz[0, :])

# Dos primeras filas, última columna
print("Esquina superior derecha 2x1:")
print(matriz[:2, -1:])
Todo: [[1 2 3]
       [4 5 6]
       [7 8 9]]
Filas desde 1: [[4 5 6]
                [7 8 9]]
Primera fila: [1 2 3]
Esquina superior derecha 2x1:
[[3]
 [6]]

Consejos finales

  • Siempre usa np.array() en lugar de listas para cálculos matemáticos

  • Verifica las dimensiones con .shape antes de operar

  • Aprovecha la vectorización → evita bucles for cuando sea posible

  • Usa tipos de datos adecuados (float32 para ahorrar memoria si no necesitas alta precisión)

Ready to take action?

Your success starts here
Formulario de registro

Creado por Wilson Quispe Alanoca con 💙

© 2026 Todos los derechos reservados.