SciPy em Python Tutorial:O que é | Exemplos de biblioteca e funções
SciPy em Python
SciPy em Python é uma biblioteca de código aberto usada para resolver problemas matemáticos, científicos, de engenharia e técnicos. Ele permite que os usuários manipulem os dados e visualizem os dados usando uma ampla variedade de comandos Python de alto nível. SciPy é construído na extensão Python NumPy. SciPy também é pronunciado como “Sigh Pi”.
Subpacotes do SciPy:
- Entrada/saída de arquivo – scipy.io
- Função especial – scipy.special
- Operação de álgebra linear – scipy.linalg
- Interpolação – scipy.interpolate
- Otimização e ajuste – scipy.optimize
- Estatísticas e números aleatórios – scipy.stats
- Integração Numérica – scipy.integrate
- Transformações rápidas de Fourier – scipy.fftpack
- Processamento de sinal – scipy.signal
- Manipulação de imagem – scipy.ndimage
Neste tutorial do Python SciPy, você aprenderá:
- O que é SciPy?
- Por que usar o SciPy
- Numpy VS SciPy
- SciPy – Instalação e configuração do ambiente
- Pacote de entrada/saída de arquivo:
- Pacote de funções especiais:
- Álgebra Linear com SciPy:
- Transformada de Fourier Discreta – scipy.fftpack
- Otimização e ajuste no SciPy – scipy.optimize
- Algoritmo Nelder-Mead:
- Processamento de imagem com SciPy – scipy.ndimage
Por que usar o SciPy
- SciPy contém variedades de subpacotes que ajudam a resolver o problema mais comum relacionado à Computação Científica.
- O pacote SciPy em Python é a biblioteca científica mais usada, perdendo apenas para a Biblioteca Científica GNU para C/C++ ou Matlab.
- Fácil de usar e entender, além de poder computacional rápido.
- Ele pode operar em uma matriz da biblioteca NumPy.
Numpy VS SciPy
Numpy:
- Numpy é escrito em C e usado para cálculos matemáticos ou numéricos.
- É mais rápido que outras bibliotecas Python
- Numpy é a biblioteca mais útil para Data Science para realizar cálculos básicos.
- Numpy não contém nada além do tipo de dados array que executa a operação mais básica, como classificação, modelagem, indexação etc.
SciPy:
- SciPy é construído em cima do NumPy
- O módulo SciPy em Python é uma versão completa de álgebra linear, enquanto o Numpy contém apenas alguns recursos.
- A maioria dos novos recursos de ciência de dados está disponível no Scipy em vez do Numpy.
SciPy – Instalação e configuração do ambiente
Você também pode instalar o SciPy no Windows via pip
Python3 -m pip install --user numpy scipy
Instale o Scipy no Linux
sudo apt-get install python-scipy python-numpy
Instale o SciPy no Mac
sudo port install py35-scipy py35-numpy
Antes de começarmos a aprender o SciPy Python, você precisa conhecer a funcionalidade básica, bem como os diferentes tipos de um array do NumPy
A maneira padrão de importar módulos SciPy e Numpy:
from scipy import special #same for other modules import numpy as np
Pacote de entrada/saída de arquivo:
Scipy, pacote de E/S, possui uma ampla gama de funções para trabalhar com diferentes formatos de arquivos que são Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV e formato binário.
Vamos pegar um exemplo de formato de arquivo Python SciPy, que é usado regularmente no MatLab:
import numpy as np from scipy import io as sio array = np.ones((4, 4)) sio.savemat('example.mat', {'ar': array}) data = sio.loadmat(‘example.mat', struct_as_record=True) data['ar']
Saída:
array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
Explicação do código
- Linha 1 e 2: Importe a biblioteca SciPy essencial em Python com pacote de E/S e Numpy.
- Linha 3 :Crie um array dimensional 4 x 4
- Linha 4 :Armazenar matriz em example.mat Arquivo.
- Linha 5: Obtenha dados de example.mat arquivo
- Linha 6 :Saída de impressão.
Pacote de funções especiais
- scipy.special pacote contém inúmeras funções de física matemática.
- A função especial SciPy inclui Raiz Cúbica, Exponencial, Log sum Exponencial, Lambert, Permutação e Combinações, Gamma, Bessel, hipergeométrico, Kelvin, beta, cilindro parabólico, Relative Error Exponential, etc.
- Para uma descrição de linha de todas essas funções, digite no console do Python:
help(scipy.special) Output : NAME scipy.special DESCRIPTION ======================================== Special functions (:mod:`scipy.special`) ======================================== .. module:: scipy.special Nearly all of the functions below are universal functions and follow broadcasting and automatic array-looping rules. Exceptions are noted.
Função de raiz cúbica:
A função de raiz cúbica encontra a raiz cúbica dos valores.
Sintaxe:
scipy.special.cbrt(x)
Exemplo:
from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb)
Saída: array([3., 4.])
Função Exponencial:
A função exponencial calcula o elemento 10**x.
Exemplo:
from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp)
Saída:[1.e+01 1.e+10]
Permutações e combinações:
O SciPy também oferece funcionalidade para calcular Permutações e Combinações.
Combinações – scipy.special.comb(N,k)
Exemplo:
from scipy.special import comb #find combinations of 5, 2 values using comb(N, k) com = comb(5, 2, exact = False, repetition=True) print(com)
Saída:15,0
Permutações –
scipy.special.perm(N,k)
Exemplo:
from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per)
Saída:20
Função exponencial de soma de log
Log Sum Exponential calcula o log do elemento de entrada exponencial de soma.
Sintaxe:
scipy.special.logsumexp(x)
Função Bessel
Enésima função de cálculo de ordem inteira
Sintaxe:
scipy.special.jn()
Álgebra Linear com SciPy
- A Álgebra Linear do SciPy é uma implementação das bibliotecas BLAS e ATLAS LAPACK.
- O desempenho da Álgebra Linear é muito rápido em comparação com BLAS e LAPACK.
- A rotina de álgebra linear aceita um objeto array bidimensional e a saída também é um array bidimensional.
Agora vamos fazer alguns testes com scipy.linalg,
Calculando o determinante de uma matriz bidimensional,
from scipy import linalg import numpy as np #define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass values to det() function linalg.det( two_d_array )
Saída: -7,0
Matriz Inversa –
scipy.linalg.inv()
Inverse Matrix of Scipy calcula o inverso de qualquer matriz quadrada.
Vamos ver,
from scipy import linalg import numpy as np # define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass value to function inv() linalg.inv( two_d_array )
Saída:
array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )
Valores próprios e vetor próprio
scipy.linalg.eig()
- O problema mais comum em álgebra linear são autovalores e autovetores que podem ser facilmente resolvidos usando eig() função.
- Agora vamos encontrar o autovalor de (X ) e correspondem ao autovetor de uma matriz quadrada bidimensional.
Exemplo
from scipy import linalg import numpy as np #define two dimensional array arr = np.array([[5,4],[6,3]]) #pass value into function eg_val, eg_vect = linalg.eig(arr) #get eigenvalues print(eg_val) #get eigenvectors print(eg_vect)
Saída:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
Transformada de Fourier Discreta – scipy.fftpack
- DFT é uma técnica matemática usada na conversão de dados espaciais em dados de frequência.
- FFT (Fast Fourier Transformation) é um algoritmo para calcular DFT
- A FFT é aplicada a uma matriz multidimensional.
- A frequência define o número de sinal ou comprimento de onda em determinado período de tempo.
Exemplo: Pegue uma onda e mostre usando a biblioteca Matplotlib. tomamos um exemplo simples de função periódica de sin(20 × 2πt)
%matplotlib inline from matplotlib import pyplot as plt import numpy as np #Frequency in terms of Hertz fre = 5 #Sample rate fre_samp = 50 t = np.linspace(0, 2, 2 * fre_samp, endpoint = False ) a = np.sin(fre * 2 * np.pi * t) figure, axis = plt.subplots() axis.plot(t, a) axis.set_xlabel ('Time (s)') axis.set_ylabel ('Signal amplitude') plt.show()
Saída:
Você pode ver isso. A frequência é de 5 Hz e seu sinal se repete em 1/5 de segundo – é chamado como um determinado período de tempo.
Agora vamos usar esta onda senoidal com a ajuda do aplicativo DFT.
from scipy import fftpack A = fftpack.fft(a) frequency = fftpack.fftfreq(len(a)) * fre_samp figure, axis = plt.subplots() axis.stem(frequency, np.abs(A)) axis.set_xlabel('Frequency in Hz') axis.set_ylabel('Frequency Spectrum Magnitude') axis.set_xlim(-fre_samp / 2, fre_samp/ 2) axis.set_ylim(-5, 110) plt.show()
Saída:
- Você pode ver claramente que a saída é uma matriz unidimensional.
- A entrada contendo valores complexos é zero, exceto dois pontos.
- No exemplo DFT, visualizamos a magnitude do sinal.
Otimização e ajuste no SciPy – scipy.optimize
- A otimização fornece um algoritmo útil para a minimização do ajuste de curva, multidimensional ou escalar e ajuste de raiz.
- Vamos dar um exemplo de uma função escalar, para encontrar a função escalar mínima.
%matplotlib inline import matplotlib.pyplot as plt from scipy import optimize import numpy as np def function(a): return a*2 + 20 * np.sin(a) plt.plot(a, function(a)) plt.show() #use BFGS algorithm for optimization optimize.fmin_bfgs(function, 0)
Saída:
A otimização foi encerrada com sucesso.
Valor da função atual:-23,241676
Iterações:4
Avaliações de funções:18
Avaliações de gradiente:6
array([-1.67096375])
- Neste exemplo, a otimização é feita com a ajuda do algoritmo de gradiente descendente a partir do ponto inicial
- Mas o possível problema são mínimos locais em vez de mínimos globais. Se não encontrarmos um vizinho de mínimo global, precisamos aplicar a otimização global e encontrar a função de mínimo global usada como basinhopping() que combina o otimizador local.
otimizar.basinhopping(função, 0)
Resultado:
fun: -23.241676238045315 lowest_optimization_result: fun: -23.241676238045315 hess_inv: array([[0.05023331]]) jac: array([4.76837158e-07]) message: 'Optimization terminated successfully.' nfev: 15 nit: 3 njev: 5 status: 0 success: True x: array([-1.67096375]) message: ['requested number of basinhopping iterations completed successfully'] minimization_failures: 0 nfev: 1530 nit: 100 njev: 510 x: array([-1.67096375])
Algoritmo Nelder-Mead:
- O algoritmo Nelder-Mead seleciona através do parâmetro do método.
- Ele fornece a maneira mais direta de minimização para uma função de comportamento justo.
- Nelder – O algoritmo Mead não é usado para avaliações de gradientes porque pode levar mais tempo para encontrar a solução.
import numpy as np from scipy.optimize import minimize #define function f(x) def f(x): return .4*(1 - x[0])**2 optimize.minimize(f, [2, -1], method="Nelder-Mead")
Saída:
final_simplex: (array([[ 1. , -1.27109375], [ 1. , -1.27118835], [ 1. , -1.27113762]]), array([0., 0., 0.])) fun: 0.0 message: 'Optimization terminated successfully.' nfev: 147 nit: 69 status: 0 success: True x: array([ 1. , -1.27109375])
Processamento de imagem com SciPy – scipy.ndimage
- scipy.ndimage é um submódulo do SciPy que é usado principalmente para realizar uma operação relacionada a imagens
- ndiimagem significa a imagem “n” dimensional.
- SciPy Image Processing fornece transformação geométrica (girar, recortar, inverter), filtragem de imagem (nitidez e definição), exibição de imagem, segmentação de imagem, classificação e extração de recursos.
- Pacote MISC no SciPy contém imagens pré-construídas que podem ser usadas para realizar tarefas de manipulação de imagens
Exemplo: Vamos dar um exemplo de transformação geométrica de imagens
from scipy import misc from matplotlib import pyplot as plt import numpy as np #get face image of panda from misc package panda = misc.face() #plot or show image of face plt.imshow( panda ) plt.show()
Saída:
Agora nós Flip-down imagem atual:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Saída:
Exemplo: Rotação de imagem usando Scipy,
from scipy import ndimage, misc from matplotlib import pyplot as plt panda = misc.face() #rotatation function of scipy for image – image rotated 135 degree panda_rotate = ndimage.rotate(panda, 135) plt.imshow(panda_rotate) plt.show()
Saída:
Integração com Scipy – Integração Numérica
- Quando integramos qualquer função em que a integração analítica não é possível, precisamos recorrer à integração numérica
- SciPy fornece funcionalidade para integrar funções com integração numérica.
- scipy.integrate A biblioteca possui integração simples, dupla, tripla, múltipla, quadrado gaussiano, regras de Romberg, trapezoidal e Simpson.
Exemplo: Agora veja um exemplo de Integração única
Aqui um é o limite superior e b é o limite inferior
from scipy import integrate # take f(x) function as f f = lambda x : x**2 #single integration with a = 0 & b = 1 integration = integrate.quad(f, 0 , 1) print(integration)
Saída:
(0,33333333333333337, 3,700743415417189e-15)
Aqui a função retorna dois valores, em que o primeiro valor é a integração e o segundo valor é o erro estimado na integral.
Exemplo:Agora veja um exemplo SciPy de integração dupla. Encontramos a dupla integração da seguinte equação,
from scipy import integrate import numpy as np #import square root function from math lib from math import sqrt # set fuction f(x) f = lambda x, y : 64 *x*y # lower limit of second integral p = lambda x : 0 # upper limit of first integral q = lambda y : sqrt(1 - 2*y**2) # perform double integration integration = integrate.dblquad(f , 0 , 2/4, p, q) print(integration)
Saída:
(3.0, 9.657432734515774e-14)
Você viu essa saída acima como a mesma anterior.
Resumo
- SciPy (pronunciado como "Sigh Pi") é uma biblioteca de código aberto baseada em Python, usada em matemática, computação científica, engenharia e computação técnica.
- SciPy contém variedades de subpacotes que ajudam a resolver o problema mais comum relacionado à Computação Científica.
- SciPy é construído em cima do NumPy
Nome do pacote | Descrição |
---|---|
scipy.io |
|
scipy.special |
|
scipy.linalg |
|
scipy.interpolate |
|
scipy.otimizar |
|
scipy.stats |
|
scipy.integrate |
|
scipy.fftpack |
|
scipy.signal |
|
scipy.ndimage |
|
python
- Instrução Python Print():Como imprimir com exemplos
- Python String count() com EXEMPLOS
- Python String format() Explique com EXEMPLOS
- Funções do Python Lambda com EXEMPLOS
- Função Python abs():exemplos de valor absoluto
- Função Python round() com EXEMPLOS
- Função Python map() com EXEMPLOS
- Python Timeit() com exemplos
- Yield in Python Tutorial:Generator &Yield vs Return Example
- type() e isinstance() em Python com exemplos