Este documento discute o uso de módulos Python para computação científica, como Numpy e Scipy. Numpy permite trabalhar com vetores e matrizes multidimensionais, enquanto Scipy fornece rotinas numéricas e de matemática avançada para integração, otimização e processamento de sinais. Exemplos demonstram como realizar cálculos estatísticos e gerar gráficos com esses módulos.
1. Computação Científica com Numpy e Scipy
Silas Santiago Lopes Pereira1
1
Departamento de Estatística e Computação – Universidade Estadual do Ceará (UECE)
Av. Paranjana, 1700 – 60740903 – Fortaleza, CE – Brasil
silas@larces.uece.br
Abstract. This paper goal to show some modules of Python Programming
language.
Resumo. Este artigo tem o objetivo de apresentar alguns módulos da
linguagem de programação Python que dispõem de um amplo conjunto de
recursos para facilitar o desenvolvimento de aplicações científicas. São
apresentadas as extensões Numpy e Scipy, entre outras, as quais fornecem
diversas funcionalidades para trabalhar com valores numéricos e rotinas com
matemática avançada.
1. Introdução
Numpy (Numeric Python) é um módulo da linguagem Python que permite trabalhar com
vetores e matrizes multidimensionais. Este módulo define os tipos matriz array
numérico e também operações básicas sobre estes. Possui diversas ferramentas
sofisticadas, tais como funções de álgebra Linear básicas, transformação de Fourier,
geração sofisticada de números aleatórios e ferramentas para integração com código
Fortran/C/C++.
SciPy (pronuncia-se “Sigh Pie”) é um software open-source para matemática,
ciência e engenharia desenvolvido por Eric Jones, Travis Oliphant,Pearu Peterson e
outros. É também o nome de uma conferência muito popular sobre programação
científica com Python, que é patrocinada pela Enthought e outras. Tal biblioteca é
projetada para trabalhar juntamente com o módulo Numpy, e provê diversas rotinas
numéricas eficientes e de fácil entendimento tais como rotinas para integração numérica
e otimização. Scipy é open source e patrocinado por Enthought
(http://www.enthought.com). Eric Jones e Travis Oliphant foram dois dos autores
originais do SciPy, o qual é agora mantido por uma próspera comunidade de usuários e
desenvolvedores.
Figura 1. Eric Jones (á esquerda) e Travis Oliphant (á direita)
2. Scipy engloba uma coleção de algoritmos matemáticos e funções apropriadas,
embasada na extensão Numérica para Python. Tal módulo é capaz de tornar
significativamente poderosa uma sessão interativa do Python, fornecendo ao usuário
comandos de alto nível e classes para manipulação e visualização de dados. Em outras
palavras, uma sessão interativa com Scipy transforma-se em uma ambiente de
processamento de dados e prototipação de sistemas capaz de competir com outros
softwares matemáticos, tais como Matlab, IDL, Octave, R-Lab e Scilab. No entanto, o
grande poder de se usar o módulo Scipy no Python é ter-se uma linguagem de
programação poderosa e de rápida prototipação e também eficaz no desenvolvimento de
programas sofisticados e aplicações especializadas, como aplicações científicas. A
figura 1 ilustra o uso do Python no modo interativo com o módulo Scipy:
Figura 1. Scipy como Ambiente Científico
2. Instalação dos Módulos
Scipy está disponível para diferentes plataformas: Mac OS X, Linux, Windows e
Solaris. O procedimento de instalação dos pacotes é bastante simples: Os binários
podem ser baixados em http://new.scipy.org/download.html ou
apt-get install python-numpy
apt-get install python-scipy
3. Funcionalidades do Scipy
Scipy é organizado em subpacotes abrangendo diferentes domínios da computação
científica. Scipy provê diversos algoritmos para cálculo científico. Os módulos contidos
3. no Scipy podem ser utilizados para realizar diversos cálculos avançados. A título de
exemplificação, alguns módulos interessantes são:
Interpolate: Funções de Interpolação
Linalg: Rotinas para Álgebra Linear
Linsolve Resolução de sistemas de equações lineares
Optimize: Rotinas de Otimização
Signal: Rotinas para Processamento de sinais
Stats: funções Estatísticas, distribuições discretas e contínuas
Io: Entrada/saída de dados
Special: Definições de muitas funções matemáticas
Weave: Integração C/C++
4. Exemplo Introdutório
Para matar a curiosidade, vamos fazer um exemplo simples antes de falar sobre as
características e funcionalidades de cada módulo.
Considere que desejamos realizar um teste de correlação linear entre duas
variáveis. Um dos procedimentos usados em estatística para comparação de duas
amostras é o teste T-student. Veja como é simples com Scipy:
1. >>> from numpy import array
2. >>> from scipy import stats
3. >>> a = array([1,2,3,4,5]) # amostra a
4. >>> b = array([1,6,5,3,5]) # amostra b
5. >>> print stats.ttest_ind(a,b)
Saída: (-0.8770580193070292, 0.40602146154521057)
4. Comparação com Matlab
Python + NumPy + SciPy = Programming Power
Definição de Função em Matlab com muitas restrições
Programação com Matlab não orientada a objetos
NumPy/SciPy é gratuito mas ainda amplamente usado
Há muitos pacotes para geração de gráficos em Python tão bons quanto Matlab
5. Explorando o Numpy
5.1. Arrays
A principal vantagem do Numpy é a entidade Array (ndarrays – Vetores homogêneos
(arrays) n-dimensionais). Arrays são semelhantes a listas do Python, exceto que cada
elemento de um array deve ser do mesmo tipo, tipicamente um valor numérico como
4. float ou int. Arrays fazem operações sobre grande quantidade de dados mais rápido e
são geralmente muito mais eficientes que listas. Observe o exemplo a seguir:
1. >>> import numpy
2. >>> print numpy.array([1,2,3,4,5])
Saída: [1 2 3 4 5]
3. >>> print numpy.arange(0.,4.5,.5)
Saída: [ 0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. ]
5.2. Matrizes
Com Numpy, torna-se possível definir matrizes e efetuar várias operações sobre elas.
Uma matriz é um tipo específico de array bidimensional a qual possui um conjunto
operações relacionadas. Veja o seguinte exemplo:
1. >>> import numpy
2. >>> l = [[1,2,3],[4,5,6],[7,8,9]]
3. >>> m = numpy.matrix(l)
4. >>> m_t = m.transpose()
5. >>> r = numpy.matrix([[1, 2, 3]])
6. >>> n = r*m
5.3. Operações com Arrays e Matrizes
numpy.zeros((M,N)) Vetor MxN de zeros
numpy.ones((M,N)) Vetor MxN de ums
numpy.empty((M,N)) Vetor MxN vazio (qualquer valor)
numpy.zeros_like(m) Vetor de zeros com formato de m
numpy.ones_like(m) Vetor de ums com formato de m
numpy.empty_like(m) Vetor de vazio com formato de m
numpy.random.random((M,N)) Vetor com valores aleatórios
numpy.identity(N) Matriz Identidade, N x N
numpy.array([(1,2,3),(4,5,6)]) Especifica os valores da matriz
numpy.matrix([[1,2,3],[4,5,6]]) Especifica os valores da matriz
numpy.arange(0.,1.,.3) Vetor com Inicio I, fim F, passo P
numpy.linspace(0.1, 1, 10) Vetor com N valores de I à F
Tabela 1. Criação de Vetores
5. a.sum() Somatório dos items
a.min() Valor mínimo
a.max() Valor máximo
a.mean() Média aritmética
a.std() Desvio Padrão
a.var() Variância
a.median() Mediana
a.trace() Traço
a.size() N° de elementos
a.shape() Formato (dimensões)
a.transpose() Matriz transposta
a.copy() Retorna cópia
a.fill(valor) Preenche com valor
Tabela 1. Métodos de um vetor a (numpy.ndarray)
A-B, A+B, A*B, A/B,A**2 Operações elemento à elemento
numpy.dot(A,B) ou mat(A)*mat(B) Produto matricial
numpy.concatenate((A,B), axis=0) Concatena vetores
A[0] 1° elemento
A[i][j] ou A[i,j] (linha i, coluna j)
x[2:5] Subvetor [x[2],x[3],x[4]]
x[:5] Subvetor [x[0],...,x[4]]
x[2:] Subvetor [x[2],...x[N]]
x[numpy.where(x>7)] Elementos em x maiores que 7
Tabela 1. Operações entre vetores
6. 6. Explorando o Scipy
6.1. Estatísticas com Scipy
Scipy possui um vasto número de rotinas básicas de estatística. Todas as funções
estatísticas estão situadas no subpcote scipy.stats e uma lista completa das funções
disponíveis pode ser obtida usando-se info(stats).
6. Outros módulos interessantes
6.1. iPython
Shell melhorado para Python com diversos recursos para programação interativa,
incluindo também interação fácil com PyLab.
6.1. PyLab
O PyLab é um módulo da linguagem Python que possibilita a geração de gráficos de
duas dimensões de excelente qualidade, permitindo edição interativa, animações,
inúmeros tipos de gráficos diferentes, anotações em sintaxe Latex e salvamento das
imagens geradas em diversos formatos diferentes. A sintaxe de criação e manipulação
das imagens será familiar para quem já trabalhou com o software comercial Matlab, mas
provendo muito mais capacidades, além de uma interface baseada em objetos, para
quem conhece a técnica.
O PyLab permite trabalhar com diversos tipos de gráficos diferentes, entre eles:
gráficos de funções, múltiplos gráficos, histogramas, funções discretas, disco, barra, etc.
Fornece funções para a customização dos gráficos, podendo trabalhar com diversas
fontes diferentes, cores, tamanhos de página, e muito mais. Além disso, existem funções
para a manipulação e análise de imagens e sinais. Enfim, um módulo bastante útil para
visualização de resultados de problemas matemáticos com Python. A seguir, um simples
exemplo de utilização do PyLab:
7. Figura 1. Exemplo de uso do PyLab
7. Matplotlib
Matplotlib é uma biblioteca para Python de gráficos 2D que permite fazer figuras com
qualidade de publicação de uma forma simples. http://matplotlib.sourceforge.net.
7.1. matplotlib.pyplot
Matplotlib.pyplot é uma coleção de comandos de funções de estilo eu fazem o
matplotlib se comportar como MATLAB. Veja um exemplo muito simples:
Figura 1. Exemplo de uso do matplotlib