Buscar
▷ Cursos de Programación de 0 a Experto © Garantizados

SciPy: Funciones principales

  • junio 21, 2017
  • Publicado por: Rafael Fernandez
  • Categoría: Blog Principiante Python
5 comentarios

 Scipy es una biblioteca de código abierto de herramientas y algoritmos matemáticos que nació a partir de la colección original de Travis Oliphant y que consistía en módulos de extensión para Python. Scipy contiene módulos para optimización, álgebra lineal, integración, interpolación, funciones especiales, FFT, procesamiento de señales e imagen, resolución de EDOs y otras tareas relacionadas con la ciencia e ingeniería. Está dirigida al mismo tipo de usuarios que los de aplicaciones como MATLAB, GNU Octave, y Scilab.

[su_box title=»Objetivo del 11º tutorial de Curso de Python para Principiantes» title_color=»#09090a» radius=»20″ box_color=»#f9ed3b»]

Realizar operaciones como: integración, interpolación y cálculo de raíces de polinomios con Scipy.

Enlistar y explorar distintos subpaquetes de la librería.

Usar Scipy en conjunto con Matplotlib.

[/su_box]

Scipy

Esta librería esta organiza por subpaquetes donde cada 1 esta enfocado a un tema de cálculos específicos:

  • Algebra lineal -> linalg
  • Procesamiento de señales -> signal
  • Funciones estadísticas -> stats
  • Funciones especiales -> special
  • Integración -> integrate
  • Herramientas de interpolación -> interpolate
  • Herramientas de optimización -> optimize
  • Algortimos de transformada de Fourier -> fftpack –
  • Entrada y salida de datos -> io
  • Wrappers a la librería LAPACK -> lib.lapack
  • Wrappers a la librería BLAS -> lib.blas
  • Wrappers a librerías externas -> lib
  • Matrices sparse -> sparse
  • otras utilidades -> misc
  • Vector Quantization / Kmeans -> cluster
  • Ajuste a modelos con máxima entropía -> maxentropy

Ejemplo: calcular los mínimos con Scipy de la siguiente función en un intervalo:

[php]

import numpy as np # Importamos numpy como el alias np

import scipy as sp# Importamos scipy como el alias sp

from scipy.optimize import fminbound # Importamos fmindbound desde scipy.optimize   

import matplotlib.pyplot as plt

#definimos la funcion

def mi_funcion(x, a, b, c, d):

y = -sp.cos(a*sp.pi*x/b) + c*x**d

return y

# Definimos los coeficientes a, b, c, d

a = 2

b = 0.5

c = 0.05

d = 2

# Definimos el intervalo de busqueda del minimo

x1 = 0.2

x2 = 0.6

xt=sp.arange(0,1,.01)

yt = -np.cos(a*sp.pi*xt/b) + c*xt**d

# Calculamos del minimo local de la funcion entre x1 y x2

x_minimo = fminbound(mi_funcion,x1,x2, args = (a,b,c,d))

ysol = mi_funcion(x_minimo, a, b, c, d)

# Presentamos la grafica y en pantalla el resultado

print (u’El minimo esta en x = %2.3f, y = %2.3f’ %(x_minimo, ysol))

plt.plot(xt,yt)

plt.plot(x_minimo,ysol,’x’)

[/php]

 

Ejemplo de ajuste de una función:

Caso real: un supermercado tiene unas previsiones de venta de pescado durante las primeras 5 horas que está abierto al público y estas vienen determinadas por la siguiente función:

El objetivo es mejorar las ventas a partir de los coeficientes desconocidos a, b, c  y d.

A continuación, revolvemos este problema:

[php]
import numpy as np # Importamos numpy como el alias np

import scipy as sp# Importamos scipy como el alias sp

from scipy.optimize import curve_fit # Importamos curve_fit de scipy.optimize

import scipy as sp # Importamos scipy como el alias sp

import matplotlib.pyplot as plt # Importamos matplotlib.pyplot como el alias plt.

def mi_funcion(x, a, b, c, d):

return a*sp.exp(-b*x**2/(2*d**2)) + c * x

# Añadimos ruido

x = sp.linspace(0, 5,40)

y = mi_funcion(x, 2.5, 1.3, 0.5,1)

def ruido(x,y,k):

yn = y + k * sp.random.normal(size = len(x))

return yn

# Ajustamos los datos experimentales a nuestra funcion y los almacenamos

coeficientes_optimizados, covarianza_estimada = curve_fit(mi_funcion, x, y)

# Mostramos los coeficientes calculados

print ("Coeficientes optimizados:", coeficientes_optimizados)

print ("Covarianza estimada:", covarianza_estimada)

# Creamos la figura

plt.figure()

# Dibujamos los datos ruido

plt.plot(x,y,’ro’, label = ‘Experimental’)

# mantenemos la figura

plt.hold(True)

results=mi_funcion(x,coeficientes_optimizados[0],coeficientes_optimizados[1],coeficientes_optimizados[2], coeficientes_optimizados[3])

plt.plot(x,results, label = ‘Ajuste’)

plt.legend()

plt.xlabel(‘Tiempo (h)’)

plt.ylabel(‘Ventas del supermercado en pescado x100 ($)’)

plt.show()

[/php]

 

Calculo de integrales:

Ejemplo para el cálculo integral siguiente de 0 a infinito.

[php]
import scipy as sp
from scipy import integrate
def integral_1(limite_inferior, limite_superior, mostrar_resultados):
# funcion e^(-x)
exponencial_decreciente = lambda x: sp.exp(-x)
# resultados por pantalla
if mostrar_resultados == True:
print (‘La integral entre %2.2f y %2.2f es ‘% (limite_inferior, limite_superior))
print(integrate.quad(exponencial_decreciente,limite_inferior,limite_superior))
# Los devuelvo
return integrate.quad(exponencial_decreciente ,limite_inferior,limite_superior)

integral_1(limite_inferior = 0, limite_superior = sp.inf, mostrar_resultados = True)
[/php]

 

Solucion:

La integral entre 0.00 y inf es
(1.0000000000000002, 5.842606996763696e-11)

 

 

Interpolación en Python:

Ejemplo de interpolación a partir de unos datos experimentales con  interpolate.interp1d

[php]

import scipy as sp

from scipy import interpolate

import matplotlib.pyplot as plt

#array

x = sp.linspace(0,3,10)

# generamos datos experimentales de ejemplo)

y = sp.exp(-x/3.0)

# Interpol

interpolacion = interpolate.interp1d(x, y)

# array con mas puntos en el mismo intervalo

x2 = sp.linspace(0,3,1000)

# Evaluamos x2 en la interpolacion

y2 = interpolacion(x2)

plt.figure

plt.plot(x, y, ‘ok’)

plt.plot(x2, y2, ‘-c’)

plt.legend((‘Datos conocidos’, ‘Datos experimentales interpolados’))

plt.show()

[/php]

Calculo de las raíces en un polinomio en Python

[php]
import scipy as sp
import matplotlib.pyplot as plt
# Creamos un polinomio
polinomio = [4.3,9,.6,-1]# polinomio = 4.3 x^3 + 9 x^2 + 0.6 x – 1
# array
x = sp.arange(-4,2,.05)
#  Evaluamos el polinomio en x mediante polyval.
y = sp.polyval(polinomio,x)
# Calculamos las raices del polinomio
raices = sp.roots(polinomio)
# Evaluamos el polinomio en las raices
s = sp.polyval(polinomio,raices)
# Las presentamos en pantalla
print ("Las raices son %2.2f, %2.2f, %2.2f. " % (raices[0], raices[1], raices[2]))
# Creamos la figura
plt.figure
# Dibujamos
plt.plot(x,y,’-‘, label = ‘y(x)’)
# Fibujamos en la figura anterior
plt.hold(‘on’)
# Dibujamos
plt.plot(raices.real,s.real,’ro’, label = ‘Raices’)
# Etiquetas
plt.xlabel(‘x’)
plt.ylabel(‘y’)
plt.title(u’Raices de un polinomio de x^3′)
# Leyenda
plt.legend()
# Mostramos la figura en pantalla
plt.show()

[/php]

 

La librería Scipy es una de las más importantes en distintas áreas de dominio de Python como la ciencia de datos, análisis de datos, computación científica y demás!!

➡ Ya aprendiste sobre SciPy. Continúa con nuestro
Curso de Python para Principiantes y aprende muchísimo mas:

[su_button url=»https://unipython.com/curso-python-nivel-principiante/» style=»3d» background=»#f9ed3b» color=»#09090a»]Curso Python desde 0 [/su_button]

Autor:Rafael Fernandez

Empezé estudiando Física aunque mas tarde me decanté por la Ingeniería. Después de hacer un master de Hidráulica (esp. Aero-hidrodinámica de Vehículos) comenzé el PhD en Ingeniería. Hoy en día me encuentro trabajando para la empresa ITK Engineering AG como ingeniero de desarrollo. Entre mi pasiones está el desarrollo e implementación de todo tipo de códigos en Python y otros lenguages. Puedes visitar mi perfil en <a href="https://www.linkedin.com/in/rafaelfernandezperfil/">Linkedin.<a>

5 comentarios

  • NumPy, SciPy y Matplotlib las librerias básicas de Python - El Blog para Aprender Python
    junio 21, 2017 a 8:57 am Responder

    […] Realizar cálculos numéricos: SciPy […]

  • Matplotlib: Funciones principales - El Blog para Aprender Python
    junio 21, 2017 a 9:20 am Responder

    […] ➡ SciPy: Cálculos en Python […]

  • Introducción del curso de Principiante - El Blog para Aprender Python
    julio 18, 2017 a 1:16 pm Responder

    […] programas. La penúltima parte del curso esta enfocada en realizar operaciones de algebra, cálculos y en como graficar los resultados obtenidos. Por último nos enfocaremos en una introduccion […]

  • Desarrolla tu Primera Red Neural en Python con Keras Paso a Paso - ® Cursos Python desde 0 a Experto ? garantizados
    abril 27, 2018 a 2:40 pm Responder

    […] Usted tiene SciPy (incluyendo NumPy) instalado y configurado. En caso contrario ve aquí. […]

  • Utilice los modelos Keras con Scikit-Learn Para el Machine Learning - ® Cursos Python desde 0 a Experto ? garantizados
    mayo 28, 2018 a 11:56 am Responder

    […] es fundamentalmente Deep Learning. La biblioteca scikit-learn en Python está construida sobre SciPy para un cálculo numérico eficiente. Es un programa con todas las funciones para el Machine […]

Deja una respuesta Cancelar la respuesta

Logo del pie de página
Copyright © MasterStudy Theme for WordPress by StylemixThemes