Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

SciPy em Python: Tutorial Completo sobre Bibliotecas e Funções

SciPy em Python: Tutorial Completo sobre Bibliotecas e Funções

SciPy em Python

SciPy é uma biblioteca open-source que estende o NumPy para fornecer ferramentas para resolver problemas matemáticos, científicos, de engenharia e técnicos. Construída sobre o NumPy, a SciPy oferece um amplo conjunto de comandos de alto nível para manipulação e visualização de dados.

Sub-pacotes

Este tutorial cobre:

Por que Usar SciPy?

NumPy vs. SciPy

NumPy

SciPy

Instalação e Configuração de Ambiente

Instale SciPy com pip ou gerenciadores de pacote do sistema:

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

Importe SciPy e NumPy em seus scripts:

from scipy import special
import numpy as np

I/O de Arquivos com scipy.io

Salve e carregue arquivos MATLAB .mat facilmente:

import numpy as np
from scipy import io as sio
array = np.ones((4, 4))
sio.savemat('exemplo.mat', {'ar': array})
carregado = sio.loadmat('exemplo.mat', struct_as_record=True)
print(carregado['ar'])

Saída:

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

Funções Especiais – scipy.special

Exemplos de funções especiais comumente usadas:

Álgebra Linear – scipy.linalg

Calcule determinante, inversa, autovalores e autovetores:

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
autovalores, autovetores = linalg.eig(A)
print(autovalores)
print(autovetores)

Saída:

-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

Transforme uma senoide e visualize seu 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('Tempo (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequencia = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequencia, np.abs(A))
plt.xlabel('Frequência (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

Otimização – scipy.optimize

Encontre o mínimo de uma função escalar usando BFGS e busca global com 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)

A saída mostra o mínimo local encontrado por BFGS e o ótimo global confirmado por basin-hopping.

Algoritmo Nelder-Mead

Minimização simples sem restrições sem informação 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 da função:', res.fun)

Processamento de Imagem – scipy.ndimage

Manipule imagens: exibir, inverter, rotacionar e 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('Invertido Verticalmente')
plt.show()

rotacionado = ndimage.rotate(panda, 135)
plt.imshow(rotacionado)
plt.title('Rotacionado 135°')
plt.show()

Integração Numérica – scipy.integrate

Integrais simples e duplas com estimativa automática de erro:

from scipy import integrate

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

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

Ambas retornam tupla: (valor, erro estimado).

Resumo

SciPy estende NumPy para fornecer uma stack completa de computação científica, incluindo álgebra linear, otimização, estatísticas, processamento de sinal e manipulação de imagem. Seus extensos sub-pacotes e suporte robusto da comunidade tornam-no indispensável para pesquisadores e engenheiros.

Nome do PacoteDescrição
scipy.ioI/O de arquivos para MATLAB, CSV, NetCDF, etc.
scipy.specialFunções matemáticas especiais (Bessel, Gamma, etc.)
scipy.linalgRotinas avançadas de álgebra linear
scipy.interpolateMétodos de interpolação
scipy.optimizeFerramentas de otimização e ajuste de curvas
scipy.statsDistribuições estatísticas & geração de números aleatórios
scipy.integrateIntegração numérica (quad, dblquad, etc.)
scipy.fftpackTransformadas rápidas de Fourier
scipy.signalUtilitários de processamento de sinal
scipy.ndimageProcessamento de imagem multi-dimensional

python

  1. Função Print() do Python: Guia Prático com Exemplos
  2. Domine o str.count() do Python: Como Contar Caracteres e Substrings com Exemplos
  3. Domine Strings format() em Python com Exemplos Claros
  4. Dominando Funções Lambda em Python: Exemplos Práticos e Boas Práticas
  5. Função abs() em Python: Calcular Valores Absolutos para Números e Complexos
  6. Função round() em Python Explicada com Exemplos Práticos
  7. Dominando a Função map() do Python: Sintaxe, Exemplos e Boas Práticas
  8. Python timeit(): Medindo Tempo de Execução com Exemplos Práticos
  9. Dominando o yield do Python: Generator vs Return – Guia Prático
  10. Entendendo type() e isinstance() em Python: Exemplos Práticos