Ultimamente, estive estudando algumas coisas sobre Python e tenho me interessado muito pela linguagem. Foi a primeira vez que tive contato com uma linguagem de tipagem dinâmica e logo de início, tive a impressão que ela seria uma ótima opção para substituir o Matlab. Gosto do Matlab, mas o fato de ser uma solução proprietária e não ser uma linguagem de propósito geral fazem com o Python tenha uns pontos a mais na minha classificação.
Para aplicações científicas, o Python conta com três bibliotecas fundamentais:
- O NumPy, que é a biblioteca fundamental para aplicações científicas em Python. Ela oferece tipos especiais para representação de vetores e matrizes, além de outras ferramentas para álgebra linear e números aleatórios;
- O SciPy, que é uma biblioteca que depende do NumPy e fornece rotinas para trabalhar em diversas áreas como integração numérica, otimização e processamento de sinais. Pode-se dizer que as rotinas do SciPy são análogas aos toolboxes do Matlab, guardadas as devidas proporções 🙂
- O matplotlib, que permite a criação de gráficos para visualização de dados.
Algumas funções do NumPy têm sintaxe parecida com a do Matlab, o que facilita as coisas para quem já é usuário do Matlab e esteja pensando em mudar para o Python. Por exemplo, para criar um vetor com 1000 elementos, de 0 a 1, espaçados linearmente, deve-se fazer:
import numpy as np
x = np.linspace(0, 1, 1000)
Nesse caso, x
será um objeto do tipo array
representando o vetor com 1000 elementos. Apesar de algumas semelhanças com o Matlab, existem muitas diferenças na forma de se trabalhar com Python. Para criar um vetor com os elementos [1, 2, 3]
, por exemplo, deve-se fazer:
import numpy as np
x = np.array([1, 2, 3])
Para fazer referência aos itens do vetor, usam-se colchetes e o índice inicial é zero, ou seja, usa-se x[0]
para retomar o primeiro item do vetor x
.
Nesse, exemplo, além da sintaxe, existe uma outra diferença significante em relação ao Matlab: ao contrário do Matlab, que representa todas as matrizes e vetores com, no mínimo, 2 dimensões, o Python permite a criação de vetores unidimensionais. Assim, no exemplo anterior, uma chamada do tipo x[0,0]
retornaria uma exceção ao contrário do que acontece no Matlab, que permite as chamadas x(1)
ou x(1,1)
para o primeiro elemento do vetor [1, 2, 3]
. Entretanto, o Python também permite a criação de vetores de duas dimensões. O equivalente ao exemplo anterior, com duas dimensões, seria:
x = np.array([[1, 2, 3]])
Vale notar que são usados dois colchetes, sendo o externo referente à definição da matriz (nesse caso, de 1 linha e 3 colunas) e o interno referente à definição da primeira linha da matriz. Nesse caso, x[0]
retorna a primeira linha da matriz, ou seja, o vetor unidimensional [1, 2, 3]
. Para retomar o primeiro item do vetor, devido à representação bidimensional, deve-se usar x[0,0]
Outra diferença significante é a sintaxe para multiplicação de matrizes. No Python, para multiplicar duas matrizes criadas como arrays, usa-se a função dot
. Exemplo:
import numpy as np
# Matriz 2x2 A = [1 2
# 3 4]
A = np.array([[1, 2], [3, 4])
# Matriz 2x2 B = [5 6
# 7 8]
B = np.array([[5, 6], [7, 8])
# C = A*B
C = dot(A,B)
Já para fazer a multiplicação elemento por elemento, como feita com o operador .*
no Matlab, usa-se apenas o asterisco no Python.
Existem ainda várias outras diferenças em relação ao Matlab. No endereço http://www.scipy.org/NumPy_for_Matlab_Users, estão descritas as mais importantes. Além disso, esse documento também é uma ótima referência para aprender as diferenças básicas entre o Matlab e o Python.
Em relação ao matplotlib, não cheguei a ver muita coisa, mas parece que a sintaxe é bem parecida com a do Matlab. Para inserir um gráfico de um período de senóide, por exemplo, deve-se fazer:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x)
plt.plot(x,y)
plt.show()
Por último, não posso esquecer de mencionar o iPython. Ele é um shell para Python com muitas melhorias em relação ao shell original. Ele oferece o recurso de auto-complete, e um acesso ao histórico de comandos, o que facilita muito o uso do shell. Além disso, em sua versão mais nova, ele veio cheio de novidades, conforme mostrado na SciPy 2011.
Para aprender sobre computação científica com Python, recomendo o site http://scipy-lectures.github.com/. Também vale a pena dar uma olhada nesses slides do Marcelo Caraciolo.
Comentários