Ir al contenido principal

SciPy: una librería Python para científicos

SciPy es un paquete científico más completo, que incluye interfases a librerías científicas muy conocidas como LAPACK, BLAS u ODR entre muchas otras.

Contiene módulos para optimización, álgebra lineal, integración, interpolación, funciones especiales, FFT, procesamiento de señales y de imagen, resolución de ODEs y otras tareas para la ciencia e ingeniería.

Proporciona algoritmos para optimización, integración, interpolación, problemas de valores propios, ecuaciones algebraicas, ecuaciones diferenciales, estadísticas y muchas otras clases de problemas.

Amplía NumPy proporcionando herramientas adicionales para el cálculo de matrices y proporciona estructuras de datos especializadas, como matrices dispersas y árboles k-dimensionales.

Para instalarlo existen varias formas, nosotros usaremos pip:

$ python -m pip install scipy
$ pip show scipy

Estos comandos lo instalarán y verificarán la instalación.

Entramos al REPL de Python:

$ python

Importemos la librería ``scipy`` y veamos la ayuda:

>>> import scipy
>>> help(scipy)

Si no da error, la istalación fue correcta.

Nota: Para las gráficas es necesario instalar la librería ``matplotlib``

La instalamos de la siguiente forma:

$ pip install matplotlib

Esta librería nos ayudará a graficar y es comúnmente usada con otras librerías como Numpy y, en este caso, SciPy.

Usos de SciPy

Esta librería es útil para:

1. Cálculos matemáticos y algebraicos
Álgebra lineal (scipy.linalg)
     Resolución de sistemas de ecuaciones lineales (solve). 
     Cálculo de determinantes, inversas y descomposiciones (LU, Cholesky, SVD). 
     Operaciones con matrices (eigenvalores, eigenvectores). 
     Ejemplo: Resolver Ax = b con scipy.linalg.solve(A, b). 

Optimización (scipy.optimize)
    Encontrar mínimos o máximos de funciones (escalares o multivariables). 
    Ajuste de curvas (fit de datos a modelos). 
   Resolución de ecuaciones no lineales (root). 
   Ejemplo: Minimizar una función con scipy.optimize.minimize(). 
   Integración numérica (scipy.integrate)Integrar funciones numéricamente (métodos como cuadratura o ODE). Resolver ecuaciones diferenciales ordinarias (ODE) con solve_ivp o odeint. Ejemplo: Calcular la integral de una función con scipy.integrate.quad(). 

2. Procesamiento de señales (scipy.signal)
     Diseñar y aplicar filtros digitales o analógicos (FIR, IIR). 
     Realizar transformadas de Fourier para análisis de frecuencias. 
     Procesamiento de señales (convolución, correlación). 
     Ejemplo: Filtrar una señal ruidosa con scipy.signal.filtfilt(). 

3. Estadística y probabilidad (scipy.stats)
    Trabajar con distribuciones probabilísticas (normal, binomial, etc.). 
    Realizar pruebas estadísticas (t-test, chi-cuadrado, etc.). 
    Generar números aleatorios y ajustar distribuciones a datos. 
    Ejemplo: Ajustar datos a una distribución normal con scipy.stats.norm.fit(). 

4. Procesamiento de imágenes (scipy.ndimage)
    Aplicar filtros a imágenes (suavizado, detección de bordes). 
   Realizar transformaciones geométricas (rotación, escalado). 
   Segmentación y análisis de imágenes. 
   Ejemplo: Aplicar un filtro gaussiano con scipy.ndimage.gaussian_filter(). 

5. Manejo de datos espaciales (scipy.spatial)
   Calcular distancias (euclidianas, Manhattan, etc.) entre puntos. 
   Construir estructuras como árboles KD para búsquedas rápidas. 
   Generar diagramas de Voronoi o triangulaciones de Delaunay. 
   Ejemplo: Encontrar los puntos más cercanos con scipy.spatial.KDTree. 

6. Funciones especiales (scipy.special)
    Usar funciones matemáticas avanzadas (Bessel, gamma, hipergeométricas). 
    Útil para física, estadística y otras ciencias.
    Ejemplo: Calcular la función gamma con scipy.special.gamma(). 

7. Interpolación (scipy.interpolate)
    Interpolar datos para estimar valores intermedios. 
    Crear funciones suaves a partir de datos discretos (splines, lineal, cúbica). 
    Ejemplo: Interpolar puntos con scipy.interpolate.interp1d(). 

8. Manejo de datos y estructuras numéricas
    Trabajar con matrices dispersas (scipy.sparse) para datos con muchos ceros (útil en machine learning o grafos). 
    Realizar operaciones eficientes con matrices grandes.

Casos prácticos

  • Ciencia de datos: Ajustar modelos estadísticos, optimizar parámetros, analizar datos. 
  • Machine Learning: Preprocesar datos, calcular métricas espaciales o implementar algoritmos numéricos. 
  • Simulaciones físicas: Resolver ecuaciones diferenciales para modelar sistemas dinámicos. 
  • Procesamiento de señales/imágenes: Filtrar datos, analizar audio o imágenes. 
  • Ingeniería: Diseñar sistemas de control, optimizar estructuras o analizar materiales.

Y es cuando terminas dandole la razón a tu profesor de matemáticas y cálculo de la Universidad. La matemática está presente en todos lados. Si creías que por ser programador no ibas a ver matemáticas el resto de tu vida, te equivocaste.

Ejemplo. Ajustar una curva a datos ruidosos.

ajuste.py

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

# Datos de ejemplo
x = np.linspace(0, 10, 100)
y = 3 * np.sin(2 * x) + np.random.normal(0, 0.5, 100)

# Modelo a ajustar
def modelo(x, a, b):
    return a * np.sin(b * x)

# Ajuste de curva
params, _ = curve_fit(modelo, x, y, p0=[2, 2])

# Graficar
plt.scatter(x, y, label="Datos", alpha=0.5)
plt.plot(x, modelo(x, *params), 'r-', label="Ajuste")
plt.legend()
plt.show()

Ejecutamos:

$ python ajuste.py

Obtendremos una gráfica:

Enlaces:

https://scipy.org/
https://research.iac.es/sieinvens/python-course/scipy.html
https://www.netlib.org/lapack/
https://www.netlib.org/blas/
https://medium.com/@ms_somanna/guide-to-adding-noise-to-your-data-using-python-and-numpy-c8be815df524
https://powerhousedm.blogspot.com/2012/02/un-modelo-para-separar-la-senal-del.html

Comentarios

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...