Sbc scipy

7
Computação Científica com Numpy e Scipy Silas Santiago Lopes Pereira 1 1 Departamento de Estatística e Computação – Universidade Estadual do Ceará (UECE) Av. Paranjana, 1700 – 60740903 – Fortaleza, CE – Brasil [email protected] 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)

Transcript of Sbc scipy

Page 1: Sbc scipy

Computação Científica com Numpy e Scipy

Silas Santiago Lopes Pereira1

1Departamento de Estatística e Computação – Universidade Estadual do Ceará (UECE) Av. Paranjana, 1700 – 60740903 – Fortaleza, CE – Brasil

[email protected]

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)

Page 2: Sbc scipy

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 Amb iente 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

Page 3: Sbc scipy

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

Page 4: Sbc scipy

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))

numpy.ones((M,N))

numpy.empty((M,N))

numpy.zeros_like(m)

numpy.ones_like(m)

numpy.empty_like(m)

numpy.random.random((M,N))

numpy.identity(N)

numpy.array([( 1, 2, 3),( 4, 5, 6)])

numpy.matrix([[ 1, 2, 3],[ 4, 5, 6]])

numpy.arange( 0. , 1. ,. 3)

numpy.linspace( 0.1 , 1, 10)

Vetor MxN de zeros

Vetor MxN de ums

Vetor MxN vazio (qualquer valor)

Vetor de zeros com formato de m

Vetor de ums com formato de m

Vetor de vazio com formato de m

Vetor com valores aleatórios

Matriz Identidade, N x N

Especifica os valores da matriz

Especifica os valores da matriz

Vetor com Inicio I, fim F, passo P

Vetor com N valores de I à F

Tabela 1. Criação de Vetores

Page 5: Sbc scipy

a.sum()

a.min()

a.max()

a.mean()

a.std()

a.var()

a.median()

a.trace()

a.size()

a.shape()

a.transpose()

a.copy()

a.fill(valor)

Somatório dos items

Valor mínimo

Valor máximo

Média aritmética

Desvio Padrão

Variância

Mediana

Traço

N° de elementos

Formato (dimensões)

Matriz transposta

Retorna cópia

Preenche com valor

Tabela 1. Métodos de um vetor a (numpy.ndarray)

A-B, A+B, A*B, A/B,A**2

numpy.dot(A,B) ou mat(A)*mat(B)

numpy.concatenate((A,B), axis=0)

A[0]

A[i][j] ou A[i,j]

x[2:5]

x[:5]

x[2:]

x[numpy.where(x>7)]

Operações elemento à elemento

Produto matricial

Concatena vetores

1° elemento

(linha i, coluna j)

Subvetor [x[2],x[3],x[4]]

Subvetor [x[0],...,x[4]]

Subvetor [x[2],...x[N]]

Elementos em x maiores que 7

Tabela 1. Operações entre vetores

Page 6: Sbc scipy

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:

Page 7: Sbc scipy

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