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:

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:

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:

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:

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:

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.

About Renato

No Comments

Be the first to start a conversation

Deixar uma Resposta

  • (will not be published)