Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

SciPy en Python: Tutorial completo sobre librerías y funciones

SciPy en Python: Tutorial completo sobre librerías y funciones

SciPy en Python

SciPy es una librería de código abierto que extiende NumPy para proporcionar herramientas para resolver problemas matemáticos, científicos, de ingeniería y técnicos. Construida sobre NumPy, SciPy ofrece un amplio conjunto de comandos de alto nivel para manipulación y visualización de datos.

Sub-paquetes

Este tutorial cubre:

Por qué usar SciPy

NumPy vs. SciPy

NumPy

SciPy

Instalación y configuración del entorno

Instala SciPy con pip o gestores de paquetes del sistema:

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

Importa SciPy y NumPy en tus scripts:

from scipy import special
import numpy as np

Entrada/Salida de archivos con scipy.io

Guarda y carga archivos MATLAB .mat fácilmente:

import numpy as np
from scipy import io as sio

array = np.ones((4, 4))
sio.savemat('ejemplo.mat', {'ar': array})
cargado = sio.loadmat('ejemplo.mat', struct_as_record=True)
print(cargado['ar'])

Salida:

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

Funciones especiales – scipy.special

Ejemplos de funciones especiales comúnmente usadas:

Álgebra lineal – scipy.linalg

Calcula determinante, inversa, valores y vectores propios:

from scipy import linalg
import numpy as np

A = np.array([[4,5],[3,2]])
print(linalg.det(A))        # -7.0
print(linalg.inv(A))        # matriz inversa
vals, vecs = linalg.eig(A)
print(vals)
print(vecs)

Salida:

-7.0
array([[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]])
[ 9.+0.j -1.+0.j]
[[ 0.70710678 -0.5547002 ]
 [ 0.70710678  0.83205029]]

Transformada discreta de Fourier – scipy.fftpack

Transforma una sinusoide y visualiza su espectro:

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy import fftpack

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)
plt.plot(t, wave)
plt.xlabel('Tiempo (s)'); plt.ylabel('Amplitud')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Frecuencia (Hz)')
plt.ylabel('Magnitud')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

Optimización – scipy.optimize

Encuentra el mínimo de una función escalar usando BFGS y búsqueda global con basin-hopping:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('Resultado BFGS:', min_bfgs)

min_basin = optimize.basinhopping(func, 0)
print('Resultado Basin-hopping:', min_basin.x)

La salida muestra el mínimo local encontrado por BFGS y el óptimo global confirmado por basin-hopping.

Algoritmo Nelder-Mead

Minimización simple sin restricciones sin información de gradiente:

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('Resultado:', res.x, 'Valor función:', res.fun)

Procesamiento de imágenes – scipy.ndimage

Manipula imágenes: mostrar, voltear, rotar y aplicar filtros.

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Volteado abajo')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Rotado 135°')
plt.show()

Integración numérica – scipy.integrate

Integrales simples y dobles con estimación automática de error:

from scipy import integrate

# Integral simple de x^2 de 0 a 1
simple = integrate.quad(lambda x: x**2, 0, 1)
print('Integral simple:', simple)

# Integral doble de 64*x*y sobre dominio triangular
doble = integrate.dblquad(lambda x, y: 64*x*y, 0, 2/4, lambda x: 0, lambda y: (1 - 2*y**2)**0.5)
print('Integral doble:', doble)

Ambas devuelven una tupla: (valor, error estimado).

Resumen

SciPy extiende NumPy para proporcionar una pila completa de computación científica, incluyendo álgebra lineal, optimización, estadísticas, procesamiento de señales y manipulación de imágenes. Sus extensos sub-paquetes y robusto soporte comunitario la hacen indispensable para investigadores e ingenieros.

Nombre del PaqueteDescripción
scipy.ioEntrada/salida de archivos para MATLAB, CSV, NetCDF, etc.
scipy.specialFunciones matemáticas especiales (Bessel, Gamma, etc.)
scipy.linalgRutinas avanzadas de álgebra lineal
scipy.interpolateMétodos de interpolación
scipy.optimizeHerramientas de optimización y ajuste de curvas
scipy.statsDistribuciones estadísticas y generación de números aleatorios
scipy.integrateIntegración numérica (quad, dblquad, etc.)
scipy.fftpackTransformadas rápidas de Fourier
scipy.signalUtilidades de procesamiento de señales
scipy.ndimageProcesamiento de imágenes multidimensionales

python

  1. Función print() en Python: Guía Práctica con Ejemplos
  2. Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
  3. Domine el Formateo de Strings en Python con format(): Ejemplos Claros
  4. Domine el Método String.find() en Python: Sintaxis, Ejemplos y Alternativas
  5. Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
  6. Función abs() en Python: calcular valores absolutos para números y complejos
  7. Función round() en Python explicada con ejemplos prácticos
  8. Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
  9. Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
  10. Dominando yield en Python: Generadores vs Return – Guía práctica
  11. Entendiendo type() e isinstance() en Python: ejemplos prácticos