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)

Upload: silas-santiago

Post on 05-Dec-2014

1.106 views

Category:

Technology


4 download

DESCRIPTION

Um tutorial bem resumido sobre scipy e numpy.

TRANSCRIPT

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)

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

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

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

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

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:

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