Escolar Documentos
Profissional Documentos
Cultura Documentos
de programao Python
Contedo
1 Introduo
1.1
Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
. . . . . . . . . . . . .
1.3
Modo interactivo
. . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Introduo programao
2.1
Tipos de dados
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
2.1.1
Valores numricos
2.1.2
Cadeias de caracteres
. . . . . . . . . . . . . . . . . . . .
2.1.3
Listas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4
Tuplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.5
Dicionrios
. . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.1
Condies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.2
Blocos de cdigo
. . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.3
Decises: if
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.4
12
3.4.1
12
3.5
3.6
A funo range . . . . . . . . . . . . . . . . . . . . . . . .
13
13
. . . . . . . . . . . . . . . . . . .
Funes
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
15
4.2
Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
4.3
Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
4.1.1
20
6 Controlo de erros
22
Contedo
7 A biblioteca padro
23
7.1
23
7.2
O mdulo sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
7.3
O mdulo os
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
7.4
O mdulo csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
8.3
8.4
8.5
25
Numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
8.1.1
Diferenas nitas . . . . . . . . . . . . . . . . . . . . . . .
26
Scipy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
8.2.1
optimize . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
8.2.2
stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
8.2.3
linalg
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
8.2.4
signal
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
8.2.5
tpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
8.2.6
integrate . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
8.2.7
outras
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
VPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
8.3.1
Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
8.3.2
Objectos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
8.4.1
plot
34
8.4.2
subplot
8.4.3
hist
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
8.4.4
scatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
8.4.5
imshow
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
38
. . . . . . . . . . . . . .
39
40
9 Concluso
42
ii
Captulo
Introduo
O Python uma linguagem de programao de alto nvel criada por Guido Van
Rossum, cuja primeira verso foi publicada em 1991. O Python suporta vrios
paradigmas de programao, como a programao estruturada, a programao
orientada a objectos e tambm alguns elementos da programao funcional,
mas nenhuma destas escolhas imposta ao utilizador, sendo possvel utilizar o
paradigma que se achar mais adequado. As principais vantagens de usar Python
so:
A qualidade do cdigo: A sintaxe do Python facilita e encoraja a legibilidade do cdigo, o que o torna mais fcil de manter e reutilizar.
1 Introduo
No caso particular das simulaes numricas utilizam-se usualmente mdulos
externos distribuio Python base, como o numpy e scipy.
O stio
www.python.org
1.1 Instalao
As distribuies do sistema operativo Linux j incluem o interpretador de linguagem Python, embora algumas bibliotecas que iremos utilizar no sejam instaladas por defeito. No sistema operativo Windows pode instalar a distribuio
ocial, de
http://www.python.org/,
em falta.
IDLE - Integrated development for Python, que includo com a distribuio Python
http://www.die-offenbachs.de/eric/index.html.
Eric, disponvel em
SPE, de
be/.
//ipython.scipy.org/)
1 Introduo
ipython
import scipy
scipy.
import scipy
help(scipy)
1 Introduo
In [1]:
help(open)
import math
(1+math.sqrt(5))/2.0
Out[2]: 1.6180339887498949
In [3]:
2**3
Out[3]: 8
Quando usado interactivamente, o interpretador mostra o resultado do comando, por exemplo 2**3 imprime 8, mas isso no acontece quando est a
executar um cheiro Python, e nessa situao temos de usar a instruo
print.
Listagem 1.1:
# * c o d i n g : l a t i n 1 *
#F i c h e i r o p r i n t . py
#O c a r d i n a l i n d i c a que o r e s t o da l i n h a um comentrio
#e s e r i g n o r a d o p e l o Python
print 2 ** 3
#Imprime 8
Para executar o cheiro print.py (listagem 1.1), numa linha de comandos:
$
python print.py
8
A primeira linha do programa (# -*- coding: latin-1 -*- ) necessria porque
este contm caracteres acentuados, e necessrio especicar como esto codicados. As codicaes usuais so o latin-1 e utf-8. Se esta linha no estivesse
presente obteramos o erro:
$
python print.py
Captulo
Introduo programao
Os computadores que utilizamos normalmente seguem a arquitectura de Von
Neumann (ver Fig. 2.1) em que o processador executa um programa armazenado
na memria, podendo ler ou escrever dados nessa mesma memria e tambm
comunicar com os dispositivos de entrada e sada. As instrues executadas pelo
processador designam-se por cdigo mquina, sendo operaes muito simples,
como por exemplo ler ou escrever um valor de uma dada posio da memria,
somar dois nmeros ou mudar o ponto de execuo do programa para uma outra
posio se o resultado da operao anterior for zero. Cada uma destas operaes elementares identicada por um nmero, e quando aplicvel, seguem-se
os nmeros referentes aos parmetros passados a essa instruo.
Como di-
assembly,
assembler.
Apesar de o
assembly
ainda necessrio estar envolvido nos detalhes da mquina, sendo complexo escrever programas extensos, pelo que hoje em dia apenas utilizado em pequenas
rotinas que necessitem de um contacto mais prximo com o
hardware.
assembly,
Pascal ou C, que utilizam abstraces mais prximas das usadas pelo homem,
mas que tal como a primeira tm de poder ser traduzidas de forma no ambgua
para cdigo mquina. A maior parte dos programas disponveis hoje em dia so
criados em linguagens deste tipo.
Neste curso vamos estudar a linguagem Python, que chamada de muito alto
nvel, pois utiliza abstraces ainda mais afastadas das utilizadas pelo processador, e que nos so mais prximas.
2 Introduo programao
e varivel
j,
seguir a um nmero para se distinguir da varivel j. As operaes que envolvam nmeros inteiros e reais retornam um resultado real e as que envolvam
dois inteiros devolvem um inteiro. Uma consequncia importante desta ltima
propriedade que o mesmo operador diviso efectua a diviso inteira para dois
valores inteiros, mas a diviso real quando um dos valores real.
Listagem 2.2:
print
print
print
1/3
1/3.0
1.0/3.0
#Imprime 0
#Imprime 0.333333333333
#Imprime 0.333333333333
Este comportamento vai mudar na verso 3.0 do Python, sendo ento o operador / sempre a diviso real, e utilizando // para a diviso inteira. Podemos
forar esse novo comportamento j na verso actual do Python se a primeira
linha do nosso programa for
Listagem 2.3:
from
__future__
import
division
' Ol ,
Mundo ! '
2 Introduo programao
Operador
Descrio
Soma
Subtraco
Multiplicao
//
Diviso inteira
**
Estas cadeias de caracteres no podem ter mudanas de linha. Se for necessrio incluir mudanas de linha pode-se ou colocar explicitamente o cdigo de
mudana de linha \n ou usar aspas triplas """.
Listagem 2.5:
s2 = " Linha
1\ n L i n h a 2 "
aspas
isso
triplas
constitua
um
iniciarmos
uma
podemos
usar
erro
s i n t a x e """
de
cadeia
mudanas
de
de
linha
caracteres
sem
que
Podemos aceder a caracteres individuais ou seces de uma cadeia de caracteres usando a notao de parntesis rectos e sequncias:
Listagem 2.6:
s = " abcdef "
len ( s )
print
print
s [0]
s [2:4]
s [ 1]
#A f u n o l e n ( s ) d e v o l v e o tamanho de s ,
# neste caso 6
#Imprime o p r i m e i r o c a r a c t e r de s , ' a '
# n d i c e s n e g a t i v o s contam a p a r t i r do fim ,
#n e s t e c a s o ' f '
#S e q u n c i a de n d i c e s , o p r i m e i r o 2 e
#menor que 4 (2 e 3 ) , n e s t e c a s o imprime ' cd '
s [::2]
s [::
s [3:]
#Todos os e l e m e n t o s , incremento 2 ,
#imprime ' ace '
1 ] #Todos os e l e m e n t o s em ordem i n v e r s a ,
#imprime ' f e d c b a '
2 Introduo programao
Mtodo
Descrio
insert(i,v)
append(v)
remove(v)
pop()
index(v)
count(v)
sort()
Ordena a lista
reverse()
s [4:2]
#I n c i o no n d i c e 4 , termina no 2 ,
#como no c o r r e s p o n d e a nenhum n d i c e
#p o s s v e l , r e t o r n a uma c a d e i a de
#c a r a c t e r e s v a z i a , ' '
s = abc
s[0] = z
s = abc
s = z + s[1:]
print s
zbc
2.1.3 Listas
Uma lista um conjunto ordenado de objectos. Uma lista pode ser alterada,
inserindo, apagando ou substituindo um ou mais elementos.
Em Python as
print
l [2]
l [0]
+= 3
l . append ( 1 j )
#Imprime 3 . 1 4
# Agora l [ 3 . 1 4 , " p i " , 1 0 ]
#I n s e r e o nmero complexo 1 j
#no fim da l i s t a
2 Introduo programao
l
= [ 1 , "a" , 3 . 1 4 , 2 . 7 1 8 ]
l [:2]
2.1.4 Tuplos
Os tuplos so sequncias ordenadas de objectos, semelhantes s listas, mas imutveis. Os tuplos so delimitados por parntesis.
Listagem 2.10:
t = ( 1 , " abc " , 5 . 0 , 7 . 4 )
t [1:3]
t2 = ( 1 0 , )
Para criar um tuplo com apenas um elemento necessrio por uma vrgula a
seguir esse elemento, de outra forma seria apenas um valor entre parntesis. Os
prprios parntesis so opcionais onde tal no ambguo:
Listagem 2.11:
a = 10
b = 20
a,b = b,a
#Operao e n t r e t u p l o s , a p e s a r de no t e r
#p a r e n t e s i s . Agora a=20 e b=10
2.1.5 Dicionrios
Um dicionrio associa valores a chaves. As chaves tm de ser valores imutveis
(nmeros, cadeias de caracteres ou tuplos destes), sendo associadas um valor
que pode ser qualquer objecto Python.
Listagem 2.12:
d = {}
d[1]
#Um d i c i o n r i o v a z i o
#A s s o c i a o v a l o r " abc " chave 1
print d . k e y s ( ) #Imprime [ 1 , 2 ]
i f 2 in d :
print "O d i c i o n r i o tem a c h a v e
2,
com o
valor " ,d [ 2 ]
Captulo
if, for
while.
Antes de estudar
3.1 Condies
Em Python qualquer objecto pode ser testado para determinar se uma condio verdadeira ou falsa. So condies falsas
None, False,
um valor numrico
or
(ou lgico),
and
(e lgico) e
not
imprimir a mensagem, pois uma lista vazia uma condio falsa, e negao de
uma proposio falsa uma proposio verdadeira.
Listagem 3.1:
lista
[]
i f not l i s t a :
print "A
lista
est
vazia "
def
10
Isto ,
Descrio
<
Menor
>
Maior
<=
Menor ou igual
>=
Maior ou igual
==
Igual
!=
Diferente
Tabela 3.1: Operadores lgicos
Listagem 3.2:
x = 5
if
x <10:
x += 1
"x
foi
incrementado "
Python no espera um novo bloco falha com o erro IndentationError. importante espaar da mesma forma os blocos de cdigo, e a conveno recomendada
usar 4 espaos.
pass.
3.3 Decises: if
A instruo
if
condio.
Listagem 3.3:
if
and a>=c :
print " a v a l o r
e l i f b>=a and b>=c :
print " b v a l o r
else :
print " c v a l o r
a>=b
mximo "
mximo "
mximo "
11
if
pode ser
if
elif,
abreviatura de else
else,
if
x >=10:
print
else
"x
maior
ou
igual
"x
menor
que
10 "
10 "
for.
Listagem 3.5:
in
range
O valor
inicial por defeito zero, o valor de paragem tem sempre de ser especicado, e
por defeito o valor do incremento 1.
Listagem 3.6:
range (5)
range ( 2 , 4 )
range ( 2 , 1 5 , 3 )
#D e v o l v e [ 0 , 1 , 2 , 3 , 4 ] . O v a l o r i n i c i a l
#zero , o incremento 1 .
#D e v o l v e [ 2 , 3 ] .
#D e v o l v e [ 2 , 5 , 8 , 11 , 1 4 ] .
#O v a l o r do incremento 3 .
range (5 ,0 , 1)
#D e v o l v e [ 5 , 4 , 3 , 2 , 1 ] . O v a l o r do
#incremento pode s e r n e g a t i v o .
range (0 ,5 , 1)
#D e v o l v e [ ] (uma l i s t a v a z i a ) .
12
while
while
else
break.
Listagem 3.7:
x = 10
while x >0:
i f x % 2 !=
print x ,
x
0:
#Se x impar
#E q u i v a l e n t e a x = x 1
As instrues
A instruo
13
Captulo
4.1 Funes
Uma funo um bloco de cdigo ao qual so opcionalmente passados parmetros e pode retornar um nico valor.
def
tabuada ( n ) :
#Chama a f u n o t a b u a d a que
#acabamos de d e f i n i r para n=9
def,
return
return,
da funo.
Listagem 4.2:
def
soma ( a , b ) :
return
a+b
c = soma ( 2 , 3 )
# Imprime a b c d e f
14
def
soma ( a , b ) :
" " "A f u n o
return
soma
devolve
soma
dos
seus
prametros """
a+b
any(iteravel) - Retorna verdade se algum dos elementos da expresso itervel for verdadeiro.
True
ou
False
de
uma lista dos atributos vlidos do objecto (como funes e variveis), caso
contrrio retorna o contedo da tabela de smbolos local.
15
eval(expressao) - Avalia a expresso contida na cadeira de caracteres expressao. Por exemplo eval(2+3) retorna 5.
True.
help() - Activa o sistema interactivo de ajuda. Se for passado um parmetro, mostra ajuda acerca desse objecto.
hex(n) - Retorna uma cadeia de caracteres com a representao hexadecimal do nmero inteiro n.
map(f,iteravel1,...) - Recebe uma funo f e um ou mais iterveis. A funo f tem de receber tantos parmetros quantos iterveis forem passados.
Retorna uma lista constituda pelo resultado de f aplicada aos elementos
dos iterveis.
range() - Cria uma lista contendo uma sequncia. Para mais detalhes ver
a Sec. 3.4.1.
16
4.2 Mdulos
Um mdulo simplesmente um cheiro com extenso .py que contem cdigo
Python. importante manter conjuntos lgicos de funes em mdulos diferentes, no s por uma questo de organizao, mas por carem em espaos
de nomes (namespaces) diferentes.
17
import:
Listagem 4.4:
numpy
as
np
#s q r t do mdulo math
#Importa o mdulo numpy , mas
#passamos a r e f e r i l o como np
sys . platform
sqrt (25.0)
x = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 1 )
Ao usar a forma import modulo1, para usar as variveis e mtodos denidos no mdulo escrevemos modulo1.metodo ou modulo1.variavel. Na forma
from modulo1
import func1,func2
ou from modulo1
import *
os mtodos
e variveis do modulo1 cam disponveis no mesmo espao de nomes que j estamos. Se importar-mos desta forma uma funo ou varivel com o mesmo nome
de uma outra j existente s podemos aceder ltima que foi importada, perdendo o acesso que j existia. A instruo
import
importantes:
Se tal no se vericar, o
reload (),
especicado.
4.3 Classes
A programao orientada a objectos (OOP) suportada em Python, sendo uma
classe criada com a instruo
class.
18
# * c o d i n g : l a t i n 1 *
class
Temperatura :
""" Converses
def
de
temperatura """
__init__ ( s e l f , t e m p _ C e l s i u s = 0 . 0 ) :
s e l f . g r a u s _ C e l s i u s = temp_Celsius
def
C2F ( s e l f , c ) :
""" Converte
return
def
return
para
Fahrenheit """
(f
de
graus
Fahrenheit
para
C e l s i u s """
32)*(5.0/9.0)
s e l f . C2F ( s e l f . g r a u s _ C e l s i u s )
Celsius ( s e l f ):
return
def
Celsius
+ 32.0
Fahrenheit ( s e l f ) :
return
def
graus
F2C ( s e l f , f ) :
""" Converte
def
de
(9.0/5.0)
s e l f . graus_Celsius
Kelvin ( s e l f ) :
return
s e l f . graus_Celsius + 273.15
riamente pelo menos um parmetro, a que por conveno se chama self que
recebe a instncia da classe que o chamou. Isto necessrio pois uma mesma
classe pode ter muitas instncias, cada uma com os seus valores, no existindo
assim ambiguidade entre as variveis da classe ou de uma instncia particular.
Uma classe pode ter um mtodo __init__ que chamado automaticamente a
quando da instanciao da classe. Se este mtodo tiver mais parmetros para
alm do self estes so recebidos dos argumentos que foram passados na criao
da instncia, neste exemplo 20.0.
Uma descrio pormenorizada de classes e OOP est fora do mbito deste
texto. Para mais detalhes consulte a documentao indicada no Cap. 9.
19
Captulo
open(nome_cheiro,modo)
#Abre o f i c h e i r o t e s t e . d a t
#para e s c r i t a
f . w r i t e ( " t e s t e \n" )
#Fecha o f i c h e i r o
f . close ()
for.
for
in f :
print l i n h a
linha
f . close ()
O exemplo seguinte tabela a funo seno, escrevendo os resultados no cheiro
seno.dat, em duas colunas separadas por um tab:
Listagem 5.3:
import
numpy
as
np
x = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 0 5 )
y = np . s i n ( x )
f = o p e n ( " s e n o . d a t " , "w" )
n = len (x)
for
in
range (n ) :
20
21
Captulo
Controlo de erros
Durante a execuo de um programa podem surgir erros, como por exemplo uma
diviso por zero. Estes erros so chamados de excepes. Se estas excepes
no forem interceptadas so reportados pelo Python e terminam a execuo do
nosso programa:
Listagem 6.1:
print
$
1/0
python erro.py
File "erro1.py", line 1, in <module>
print 1/0
# * c o d i n g : l a t i n 1 *
def
dividir (a , b ):
try :
return a / b
except Z e r o D i v i s i o n E r r o r :
return " D i v i s o p o r z e r o
print
!"
dividir (1 ,0)
Neste exemplo uma instruo que pode falhar est dentro uma instruo
/
except,
try
22
Captulo
A biblioteca padro
O Python uma linguagem com as pilhas includas no sentido em que inclui
uma extensa lista de mdulos.
parte dos mdulos disponveis, para ver a lista completa consultar a Python
Library Reference em
http://docs.python.org/lib/lib.html.
math
cos, tan, asin, acos, atan, atan2), funes trigonomtricas hiperblicas (sinh, cosh, tanh), raiz quadrada (sqrt), exponenciao
(exp, pow ), logaritmos (log , log10), bem como as constantes e e pi.
O mdulo
cmath
semelhante ao
cmath
math,
math
apenas
Listagem 7.1:
import
import
math
cmath
math . s q r t ( 1 . 0 )
#Erro ValueError , p o i s no e x i s t e
#a r a i z quadrada r e a l de 1
cmath . s q r t ( 1 . 0 )
#Imprime 1 j
sys.argv
sys.stdin, sys.stdout
sys.stderr
As variveis
esto ligados entrada padro, sada padro e sada de erros padro respectivamente. A funo
sys.exit()
23
7 A biblioteca padro
7.3 O mdulo os
O mdulo
os
forma portvel.
import
csv
[]
y =
[]
r e a d e r = c s v . r e a d e r ( f , d e l i m i t e r=" \ t " )
for
in
reader :
x . append ( f l o a t ( r [ 0 ] ) )
y . append ( f l o a t ( r [ 1 ] ) )
f . close ()
24
Captulo
parte da distribuio ocial do Python, embora estejam normalmente disponveis nas distribuies de Linux, e na distribuio de Python para Windows da
Enthought, podendo tambm ser obtidos a partir de
http://www.scipy.org/.
8.1 Numpy
O numpy uma extenso do Python que adiciona suporte para vectores e matrizes multi-dimensionais, bem como uma srie de funes que operam nesses
objectos. O numpy est documentado exaustivamente num livro gratuito, disponvel em
http://www.tramy.us/guidetoscipy.html.
import
numpy
as
np
a = np . a r r a y ( [ 1 , 2 , 3 ] )
#Array 1D com os v a l o r e s de 0 a 10 , p a s s o 0 . 1
#armazenados como r e a i s de p r e c i s o d u p l a
b = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 1 , d t y p e=np . f l o a t 6 4 )
Um array tem vrios atributos bsicos. Por exemplo para um array a:
25
Descrio
bool
uint8
int32
Inteiro 32 bits
int64
Inteiro 64 bits
oat32
oat64
complex64
complex128
a.dtype: Tipo de dados. Ver a tabela 8.1 para uma lista de tipos de dados.
import
numpy
as
np
#Array de r e a i s de p r e c i s o d u p l a
#com 3 l i n h a s e 4 c o l u n a s , i n i c i a l i z a d o a z e r o
x = np . z e r o s ( ( 3 , 4 ) , d t y p e=np . f l o a t 6 4 )
import
numpy
as
np
x = np . a r r a y ( [ 1 0 , 2 , 3 , 5 ] )
y = np . a r r a y ( [ 2 , 4 , 1 5 , 2 ] )
np . g r e a t e r ( x , y )
#Imprime [ True F a l s e F a l s e
True ]
26
Descrio
abs
Valor absoluto
conj
Complexo conjugado
exp(x)
ex
log
Logaritmo natural
log10
Logaritmo base 10
sqrt
Raiz quadrada
square(x)
reciprocal(x)
x2
1/x
Funes trignomtricas
arctan2(x1,x2)
hypot(x1,x2)
x21 + x22
sinh,cosh, tanh
maximum(x1,x2)
Elemento mximo
minimum(x1,x2)
Elemento mnimo
real, imag
d2 U
dU
=k 2
dt
dx
x,
sobre a coordenada
temos
U
2Ui1 + Ui+1
Uij+1 Uij
= k i1
,
t
x2
ou seja,
Uij+1 = Uij +
kt j
j
j
U
2U
+
U
i1
i1
i+1 .
x2
Listagem 8.4:
# * c o d i n g : l a t i n 1 *
#Equao do c a l o r , dU/ d t = k d^2U/ dx ^2
import
import
numpy
as
np
pylab
dt = 0 . 0 5
dx = 0 . 5
27
t,
Descrio
all(x)
angle(z)
any
append
arange
array
astype
average
Mdia de um array
clip
concatenate
Concatena arrays
copy
cross
delete
diag
Matriz diagonal
di(x)
eye
Matriz identidade
at
atten
frombuer
fromle
inner
Produto interno
insert
inv
Matriz inversa
linspace(inicio,m,N)
mat, matrix
max
Valor mximo
min
Valor mnimo
newaxis
nonzero
ravel
Verso 1D do array
reshape
resize
select
shape
A forma do array
shue
sort
Ordena o array
sum
swapaxes
take
tole
tolist
unique(x)
where(condio,a,b)
zeros, ones
1 0 . 0 , 1 0 . 0 , dx )
t = np . a r a n g e ( 0 . 0 , 1 0 . 0 , d t )
nx = l e n ( x )
nt = l e n ( t )
#D i s t r i b u i o i n i c i a l
u = np . e x p ( ( x + 2 . 0 ) ** 2 ) + np . e x p ( ( x 2 . 0 ) * * 2 )
sol
= np . z e r o s ( ( nt , nx ) , d t y p e=u . d t y p e )
sol [0 ,:]
for
= u
in
u[1:
xrange ( 1 , nt ) :
1]
sol [ i , : ]
+= ( k * d t / dx * * 2 ) * (
u[:
2 ] 2.0 * u [ 1 : 1 ]
= u
1] , t [ 0 ]
, t[
1]))
pylab . c o l o r b a r ( )
pylab . x l a b e l ( "x" )
pylab . y l a b e l ( " t " )
p y l a b . show ( )
0.90
8
0.75
0.60
0.45
4
0.30
2
0.15
0
-10
-5
0
x
29
0.00
+ u[2:])
for
8.2 Scipy
O scipy complementa o suporte de vectores multidimensionais do numpy com
mdulos com rotinas gerais para clculo nmerico como minimizao, integrao, transformadas de Fourier rpidas e outras tarefas comuns.
8.2.1 optimize
Rotinas gerais de optimizao e minimizao.
Mtodo
Descrio
fmin
fmin_powell
fmin_cg
fmin_bfgs
fmin_ncg
leastsq
fsolve
brentq
bisect
Mtodo da bisseco
newton
Mtodo de Newton
Tabela 8.4: Alguns mtodos de scipy.optimize
8.2.2 stats
Um conjunto de distribuies de probabilidade incluindo por exemplo as distribuies normal, Chi-quadrado, Cauchy, Gamma, Logstica, T de Student, as
distribuies discretas binomial, Bernoulli, geomtrica e Poisson entre outras.
Inclui tambm as funes estatsticas usuais como a media, mediana, moda, etc.
8.2.3 linalg
Rotinas de lgebra linear.
30
Descrio
inv
solve
det
norm
Norma
lstsq
eig
eigvals
lu
cholesky
qr
8.2.4 signal
Rotinas de processamento de sinal
Mtodo
Descrio
convolve
Convoluo
correlate
Correlao
tconvolve
bspline
B-splines
medlt
Filtro median
sawtooth
square
Onda quadrada
boxcar
Janela boxcar
triang
Janela triangular
gaussian
Janela gaussiana
hann
Janela de Hann
hamming
Janela de Hamming
Tabela 8.6: Alguns mtodos de scipy.signal
8.2.5 tpack
Transformadas de Fourier rpidas
Mtodo
Descrio
t / it
Transformada de Fourier 1D
tn / itn
tshift
hilbert / ihilbert
Transformada de Hilbert
di
31
8.2.6 integrate
Integrao e resoluo de equaes diferenciais ordinrias
Mtodo
Descrio
quad
dblquad
tplquad
xed_quad
Quadratura Gaussiana
quadrature
romberg
odeint / ode
8.2.7 outras
Para alm dos componentes do scipy apresentados acima, destacam-se:
8.3 VPython
O VPython, ou Visual Python (http://vpython.org/), uma biblioteca
Python que permite criar grcos 3D interactivos particularmente apropriados
para demonstraes de princpios fsicos.
Listagem 8.5:
from
visual
import *
r e d b o x=box ( p o s=v e c t o r ( 4 , 2 , 3 ) , s i z e = ( 8 . , 4 . , 6 . ) ,
c o l o r=c o l o r . r e d )
g r e e n b a l l=s p h e r e ( p o s=v e c t o r ( 4 , 7 , 3 ) ,
r a d i u s =2 ,
c o l o r=c o l o r . g r e e n )
possvel rodar a gura mantendo o boto direito do rato premido sobre
a janela e movendo-o.
As chamadas
box
sphere
criam os respec-
32
33
Descrio
Cilindro
Cone
arrow(pos=<ponto>, axis=<vec>)
Seta
pyramid(pos=<ponto>, size=<vec>)
Pirmide
sphere(pos=<ponto>, radius=<n>)
Esfera
Elipside
Caixa
Curva
Anel
Hlice
Texto
8.3.1 Vectores
O VPython suporta o tipo vector.
Listagem 8.6:
from
import *
visual
a = vector ( 1 . , 2 . , 3 . )
b = vector ( 4 . , 5 . , 6 . )
c=a+b
# d um e s c a l a r
# produto v e c t o r i a l
dot ( a , b ) # produto e s c a l a r
norm ( a ) # Versor segundo a d i r e c o a
d = mag ( c )
f = cross (a , b)
g =
h =
8.3.2 Objectos
Na tabela 8.9,
<ponto>
<n>
<vec>
um nmero real.
8.4 matplotlib
O matplotlib uma biblioteca que produz grcos 2D de elevada qualidade,
disponvel em
http://matplotlib.sourceforge.net/,
8.4.1 plot
import
import
pylab
numpy
as
np
34
1.2
sinc(x)
1.0
0.8
0.6
0.4
0.2
0.0
-0.2
-0.4
-30
-20
-10
0
x
x = np . a r a n g e (
y = np . s i n ( x ) / x
p y l a b . p l o t ( x , y , l a b e l =" s i n c ( x ) " )
pylab . x l a b e l ( "x" )
pylab . y l a b e l ( "y" )
pylab . legend ( )
pylab . g r i d ( )
p y l a b . show ( )
8.4.2 subplot
import
import
def
pylab
numpy
as
np
g r a f i c o (m) :
x = np . a r a n g e (
y = np . s i n (m* x )
pylab . p l o t ( x , y )
p y l a b . t i t l e ( "m="+ s t r (m) )
35
10
20
30
m=1
1.0
0.5
0.5
0.0
0.0
-0.5
-0.5
-1.0
-10
-5
10
m=3
1.0
-1.0
-10
0.5
0.0
0.0
-0.5
-0.5
-5
-5
10
-1.0
-10
-5
for
in
range ( 4 ) :
p y l a b . s u b p l o t ( 2 , 2 , i +1)
g r a f i c o ( i +1)
p y l a b . show ( )
8.4.3 hist
import
import
import
pylab
numpy
as
np
numpy . random
as
random
8.4.4 scatter
import
pylab
36
10
10
m=4
1.0
0.5
-1.0
-10
m=2
1.0
700
600
500
400
300
200
100
0
-4
-3
-2
-1
37
-1
-2
-3
-1.5
-1.0
-0.5
0.0
0.5
import
import
numpy
as
np
numpy . random
as
random
n = 100
x = random . n o r m a l ( 0 . 0 , 0 . 5 , s i z e =n )
y = random . n o r m a l ( 0 . 0 , 1 . 0 , s i z e =n )
a r e a = 1 0 0 . 0 / np . s q r t ( x ** 2+y * * 2 )
c o r = np . a r a n g e ( 0 , n , 1 )
p y l a b . s c a t t e r ( x , y , c=c o r , s=a r e a , a l p h a = 0 . 7 5 )
p y l a b . show ( )
8.4.5 imshow
import
import
pylab
numpy
as
x = np . a r a n g e (
np
y = x
X, Y = np . m e s h g r i d ( x , y )
p y l a b . imshow ( np . s i n (X) * np . c o s (Y) ,
extent =[
38
1.0
1.5
0.8
0.6
0.4
0.2
0.0
-0.2
-2
-0.4
-0.6
-4
-0.8
-4
-2
-1.0
39
y (x)
Listagem 8.7:
s t o r e ( x_data , y_data , f i l e n a m e ) :
n = l e n ( x_data )
file
= NetCDFFile ( f i l e n a m e , "w" )
f i l e . c r e a t e D i m e n s i o n ( "x" , n )
x =
y =
x [:]
= x_data
y [:]
= y_data
f i l e . close ()
x = np . a r a n g e ( 0 , 2 . 0 * np . p i , 0 . 1 )
y = np . s i n ( x )
s t o r e ( x , y , " t e s t . nc " )
Os mtodos disponibilizados por este interface so:
Os cheiros
le.createDimension(dimensao,tamanho) - O NetCDF dene todos os valores em termos de dimenses, pelo que antes de se poderem criar quaisquer variveis necessrio criar primeiro as dimenses que elas usam.
le.createVariable(nome,tipo,dimensoes) - Cria uma varivel onde vo poder ser armazenados dados. Os parmetros so o nome da varivel, o tipo
(f - real preciso simples, d - real preciso dupla, i - inteiro, l inteiro longo, c - caracter, b - byte) e dimensoes um tuplo com os
nomes das dimenses desta varivel.
40
Podemos aceder e criar atributos globais do cheiro netCDF acedendo propriedade respectiva de le. Por exemplo, para criar o atributo nome com o valor
teste:
le.nome = teste
Podemos ler os cheiros resultantes com qualquer programa que suporte o formato netCDF, como o ncview (http://meteora.ucsd.edu/~pierce/ncview_
home_page.html). O conjunto de programas NCO (netCDF Operators), disponvel em http://nco.sourceforge.net/, til para manipular estes cheiros.
41
Captulo
Concluso
A linguagem Python torna a programao mais fcil, no limitando o utilizador.
Para aprender mais acerca do Python pode consultar:
net/thinkCSpy/
http://openbookproject.
http://diveintopython.org/
expe
http://www.tramy.us/
guidetoscipy.html.
docstrings.
42