Após conhecer os três pacotes fundamentais do PyData Stack (NumPy, Pandas e Matplotlib), irei agora apresentar um pacote um pouco mais específico: o SciPy.
O SciPy é uma biblioteca voltada para computação científica. O conjunto de algoritmos e funções presentes no SciPy permite estender as funcionalidades do NumPy, transformando uma sessão do Python em um sistema de prototipagem equivalente ao Matlab ou Octave. Nele, estão disponíveis uma série de pacotes para FFT (transformada rápida de Fourier), processamento de sinais e imagens, álgebra linear, etc.
Talk is cheap! Show me the code!
Exemplo de aplicação em Álgebra Linear
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from numpy import *
from pylab import *
A = array([[1,2,3], [4,5,6], [7,8,9]])
b = array([1,2,3])
# Resolvendo um sistema de equações lineares
x = solve(A, b)
x
#=> array([-0.23333333, 0.46666667, 0.1])
A = rand(3,3)
B = rand(3,3)
evals, evecs = eig(A)
evals
#=> array([ 1.12357541, -0.22168406, 0.04558271])
evecs
#=> array([[-0.69511641, -0.72547454, 0.47440231],
# [-0.42786302, 0.29810437, -0.88013834],
# [-0.5777079 , 0.62033901, 0.01728984]])
# Decomposição da matriz em valores singulares
svd(A)
#=> (array([[-0.70675037, 0.70721235, 0.01883096],
# [-0.42069691, -0.3987242 , -0.81488228],
# [-0.56878645, -0.58384048, 0.57932052]]),
# array([1.12603622, 0.29887502, 0.0337361 ]),
# array([[-0.68149749, -0.38076708, -0.62496208],
# [-0.50466044, -0.37392978, 0.77813518],
# [ 0.52998019, -0.84569081, -0.06267413]]))
Transformada de Fourier
1
2
3
4
5
6
7
8
9
10
11
12
from scipy.fftpack import *
# Transformada de Fourier
N = len(t)
dt = t[1]-t[0]
F = fft(y2[:,0])
w = fftfreq(N, dt)
fig, ax = subplots(figsize=(9,3))
ax.plot(w, abs(F));
Otimização
1
2
3
4
5
6
7
8
from scipy import optimize
def f(x):
return 4*x**3 + (x-2)**2 + x**4
fig, ax = subplots()
x = linspace(-5, 3, 100)
ax.plot(x, f(x));
1
2
3
4
5
6
7
8
x_min = optimize.fmin_bfgs(f, -0.5)
x_min
#=> Optimization terminated successfully.
# Current function value: 2.804988
# Iterations: 4
# Function evaluations: 18
# Gradient evaluations: 6
# array([0.46961743])
Estas são apenas algumas das muitas possibilidades oferecidas pelo SciPy. Lembrando que, para compreendê-lo é necessário entender alguns conceitos um pouco mais avançados de Matemática e Estatística. Neste link, você encontra a documentação oficial do SciPy. Abaixo, vou deixar uma lista com o conjunto de pacotes para operações matemáticas e científicas disponíveis nele.
Pacote | Descrição |
cluster |
Clustering algorithms |
constants |
Mathematical and physical constants |
fftpack |
Fourier transforms |
integrate |
Numerical integration |
interpolate |
Interpolation |
io |
Input and output |
linalg |
Linear algebra |
maxentropy |
Maximum entropy models |
misc |
Miscellaneous |
ndimage |
Multi-dimensional image processing |
odr |
Orthogonal distance regression |
optimize |
Optimization |
signal |
Signal processing |
sparse |
Sparse matrices |
spatial |
Spatial algorithms and data structures |
special |
Special functions |
stats |
Statistical functions |
stsci |
Image processing |
weave |
C/C++ integration |
Até o próximo post, pessoal! 👨💻