Professional Documents
Culture Documents
30 de Maio de 2015
Contedo
Parte I
Introduo
Sintaxe
Tipos de dados
Construes bsicas (if, while, for, ...)
Listas, Tuplas
Funes
Parte II
Dicionrio
Orientao a objetos
Programao funcional
Mdulos
Arquivos
Parte III
Computao cientfica com Python
Parte IV
Bibliotecas e programas interessantes
2 / 180
Parte I
Introduo linguagem Python
3 / 180
Sobre a linguagem Python
4 / 180
Sobre a linguagem Python
5 / 180
Sobre a linguagem Python
6 / 180
Porque usar Python?
Fcil, simples
Sintaxe limpa
Diversas bibliotecas j inclusas
Mais expressiva do que muitas linguagens (C/C++,
Perl, Java)
Interativa
Prottipos rpidos
Alta produtividade
Interfaces para outras linguagens como C/C++ e
Fortran
7 / 180
Vamos comear
8 / 180
Vamos comear
>>>
>>> print 2 + 2
4
>>> print pink + floyd
pinkfloyd
>>> x = 2**3
9 / 180
Alguns detalhes
10 / 180
Alguns detalhes
11 / 180
Tipos de Dados
>>> x = 2 ** 3
>>> x / 2
4
>>> type(x)
int
>>> c1 = 3 + 1j
>>> c2 = complex(-3,2)
>>> c1 + c2
3j
12 / 180
Tipagem forte
>>> c = "5"
>>> q = 4
>>> c, q = q, c
>>> print c, q
4 5
>>> print c + q
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate str and int objects
13 / 180
Tipagem forte
>>> c = "5"
>>> q = 4
>>> c, q = q, c
>>> print c, q
4 5
>>> print c + q
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate str and int objects
14 / 180
Strings
15 / 180
Strings
>>> simples
simples
>>> "dupla"
dupla
>>> """tripla"""
tripla
16 / 180
Strings
>>> print("C:\diretorio\novo\nada.exe")
C:\diretorio
ovo
ada.exe
17 / 180
Strings
>>> print("C:\diretorio\novo\nada.exe")
C:\diretorio
ovo
ada.exe
18 / 180
Strings
>>> print("C:\diretorio\novo\nada.exe")
C:\diretorio
ovo
ada.exe
>>> print(rC:\diretorio\novo\nada.exe)
C:\diretorio\novo\nada.exe
>>> print(u"\u2192")
19 / 180
Strings
Strings so imutveis
>>> "hello" + "world" # concatenacao
helloworld
>>> s = hello
>>> s[0] = j
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: str object does not support item assignment
>>> sn = j + s[1:]
>>> sn
jello
20 / 180
Strings
21 / 180
Strings
Formatadores especiais
>>> text = o valor de pi eh = %f % pi
>>> print text
>>> a = 10.2
>>> i = 100
>>> s = oi
>>> text = "float=%f inteiro=%d string=%s" % (a,i,s)
22 / 180
Strings
>>> s = "hello"
>>> s[0]
h
>>> s[1:]
ello
>>> s[1:4]
ell
>>> s[:]
hello
>>> s[1:100]
ello
23 / 180
Strings - Mtodos
24 / 180
Strings - Mtodos
25 / 180
Strings - Mtodos
Passo a passo
>>> s = "PYTHON IS POWERFUL"
>>> s.lower()
python is powerful
>>> s.lower().split()
[python, is, powerful]
>>> a = s.lower().split()
>>> ". ".join(a)
python. is. powerful
>>> ". ".join(a) + "!!!"
python. is. powerful!!!
26 / 180
Strings - Mtodos
# split()
>>> s = monty python and the flying circus
>>> print s.split()
[monty, python, and, the, flying, circus] # opa, uma lista!
# count()
>>> print s.count("th")
# join()
>>> s = "em busca do calice sagrado"
>>> s2 = s.split()
>>> print "/".join(s2)
em/busca/do/calice/sagrado
27 / 180
Listas e Tuplas
28 / 180
Tuplas
>>> t_vazia = ()
>>> print len(t_vazia)
0
29 / 180
Tuplas
30 / 180
Listas
"Arrays flexveis"
>>> a = [spam, eggs, 100, 1234]
>>> a
[spam, eggs, 100, 1234]
>>> a[0]
spam
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
[eggs, 100]
31 / 180
Lista - Mtodos
>>> a = range(5)
>>> print a Sada
>>> a.append(5)
>>> print a [0, 1, 2, 3, 4]
>>> a.insert(0,42) [0, 1, 2, 3, 4, 5]
>>> print a [42, 0, 1, 2, 3, 4, 5]
>>> a.reverse() [5, 4, 3, 2, 1, 0, 42]
>>> print a [0, 1, 2, 3, 4, 5, 42]
>>> a.sort()
>>> print a
Outros mtodos
extend(L): append de uma lista L
remove(x): remove primeira ocorrncia de x
index(x): retorna o ndice da primeira
ocorrncia de x na lista
count(x): retorna o nmero de ocorrncias de x
na lista
32 / 180
Lista
Representao
33 / 180
Lista
Representao
Alteraes
34 / 180
Lista
Concatenao
>>> original = [H, He, Li]
>>> temp = [Be]
>>> final = original + temp
>>> print final
[H, He, Li, Be]
35 / 180
Lista
Slice
>>> l = range(10)
>>> l[2:6]
[2, 3, 4, 5]
36 / 180
Lista
Slice
>>> l = range(10)
>>> l[2:6]
[2, 3, 4, 5]
Lista aninhada
37 / 180
Lista
Slice
>>> l = range(10)
>>> l[2:6]
[2, 3, 4, 5]
Lista aninhada
>>> la = [[a,b],[1,2],[3,4]]
>>> print la
[[a, b], [1, 2], [3, 4]]
>>> print la[0]
[a, b]
>>> print la[1]
[1, 2]
>>> print la[2][1]
4
38 / 180
Built-ins
39 / 180
Built-ins
Alguns exemplos
range para listas
all e any para aplicar filtros booleanos em
listas
dict, list, set e object
sorted e reversed para ordenar listas
int, str e float que servem para construir tipos
min, max e sum para operaes matemticas em
listas
help, dir
40 / 180
Built-ins
Documentao
http://docs.python.org/library/functions.html
http://docs.python.org/
41 / 180
A funo range
>>> help(range)
42 / 180
A funo range
>>> help(range)
range(...)
range([start,] stop[, step]) -> list of integers
43 / 180
A funo range
>>> help(range)
range(...)
range([start,] stop[, step]) -> list of integers
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10,20)
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> range(10,20,2)
[10, 12, 14, 16, 18]
>>> range(20,10,-1)
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
44 / 180
bool
>>> y = True
>>> not y
False
45 / 180
Indentao
if (num % 2 == 0)
{
if (num % 2 == 0) {
par = par + 1;
par = par + 1;
printf("Par");
printf("Par");
}
} else {
else
impar = impar + 1;
{
printf("Impar");
impar = impar + 1;
}
printf("Impar");
}
46 / 180
Indentao
if (num % 2 == 0)
{
if (num % 2 == 0) {
par = par + 1;
par = par + 1;
printf("Par");
printf("Par");
}
} else {
else
impar = impar + 1;
{
printf("Impar");
impar = impar + 1;
}
printf("Impar");
}
Isso mesmo!
Tudo que pertence a um mesmo bloco fica alinhado
no mesmo nvel do cdigo fonte.
if num % 2 == 0:
par = par + 1
print Par
else:
impar = impar + 1
print Impar
48 / 180
Indentao
Isso mesmo!
Tudo que pertence a um mesmo bloco fica alinhado
no mesmo nvel do cdigo fonte.
if num % 2 == 0:
par = par + 1
print Par
else:
impar = impar + 1
print Impar
Erro de indentao
if x % 2 == 0:
print par
File "<stdin>", line 2
print par
^
IndentationError: expected an indented block
If-Else
if exp:
comandos
else:
comandos
If-Else-If-Else
if exp:
comandos
elif exp:
comandos
else:
comandos
50 / 180
Estruturas de Controle
If-elif-else
If-Else Exemplo
>>> x = int(raw_input("Numero: "))
if exp:
>>> if x < 0:
comandos
... print Negativo
else:
... elif x == 0:
comandos
... print Zero
... else:
... print Positivo
51 / 180
Estruturas de Controle
For, While
For While
lst = [10,20,30,oi,tchau] while exp:
for item in lst: comandos
print item
while exp:
for letra in "python": if exp2:
print letra comandos1
if exp3:
for k in range(100): break
print k comandos2
52 / 180
Estruturas de Controle
For, While
For While
lst = [10,20,30,oi,tchau] while exp:
for item in lst: comandos
print item
while exp:
for letra in "python": if exp2:
print letra comandos1
if exp3:
for k in range(100): break
print k comandos2
53 / 180
Estruturas de Controle
For, While
For While
lst = [10,20,30,oi,tchau] while exp:
for item in lst: comandos
print item
while exp:
for letra in "python": if exp2:
print letra comandos1
if exp3:
for k in range(100): break
print k comandos2
54 / 180
Outras construes para loops
enumerate()
55 / 180
Outras construes para loops
zip()
56 / 180
Estruturas de Controle
Switch
>>> if n == 0:
... print Voce digitou zero.
... elif n == 1:
... print Voce digitou um.
... elif n == 2:
... print Voce digitou dois.
... elif n == 3:
... print Voce digitou tres.
... else:
... print Voce digitou qualquer coisa.
57 / 180
Funes
Procedimento
def nome(arg1, arg2, ...):
comandos
return
Funo
def nome1(arg1, arg2, ...):
comandos
return expressao
58 / 180
Funes
Procedimento
def nome(arg1, arg2, ...):
comandos
return >>> def par(n):
... return (n % 2 == 0)
59 / 180
Funes
60 / 180
Funes
Exemplo
def divide(a, b):
"""
Divide operando a e b usando divisao inteira.
Returna o quociente e resto da divisao em uma tupla.
"""
q = a // b
r = a - q * b
return q, r
Uso
>>> div(10,2)
(5, 0)
>>> mq, mr = div(10,3)
>>> print mq, mr
3 1
>>> help(divide)
divide(a, b)
Divide operando a e b usando divisao inteira.
Returna o quociente e resto da divisao em uma tupla.
61 / 180
EXERCCIO
Dicas:
string
split
slice
acesso sequencial
Crie um arquivo texto para codificar a sua
funo.
Veja o exemplo a seguir.
62 / 180
EXERCCIO
def url_parse(url):
"""
Implemente a funcao abaixo
"""
pass
if __name__ == "__main__":
urlteste = raw_input()
print url_parse(urlteste)
63 / 180
EXERCCIO
64 / 180
EXERCCIO
Mdulo
Vamos supor que voc tenha codificado a funo
url_parse() em um arquivo fonte chamado teste.py
Como posso usar essa funo em outros programas?
65 / 180
EXERCCIO
Mdulo
Vamos supor que voc tenha codificado a funo
url_parse() em um arquivo fonte chamado teste.py
Como posso usar essa funo em outros programas?
Basta usar os comandos from e import da seguinte
forma
>>> from teste import url_parse
>>> print url_parse("http://semcomp.icmc.usp.br/programacao")
semcomp.icmc.usp.br
66 / 180
Parte II
Uma introduo um pouco mais avanada
67 / 180
Dicionrio
68 / 180
Dicionrio
69 / 180
Dicionrio
>>> d = {}
>>> d[paulo] = 25
>>> d[jose] = 16
>>> d[alice] = 21
>>> print d
{paulo: 25, jose: 16, alice: 21}
>>> print d[alice]
21
>>> d[alice] = Paris
>>> print d
{paulo: 25, jose: 16, alice: Paris}
>>> jose in d
True
70 / 180
Dicionrio
Percorrendo dicionrios
71 / 180
List comprehension
72 / 180
List comprehension
73 / 180
List comprehension
74 / 180
List comprehension
75 / 180
List comprehension
Outro exemplo
>>> texto = "There is someone in my head but it is not me".split()
>>> nova = [(p.upper(), p.lower(), len(p)) for p in texto]
>>> print nova
[(THERE, there, 5),
(IS, is, 2),
(SOMEONE, someone, 7),
...
]
76 / 180
List comprehension
Outro exemplo
>>> texto = "There is someone in my head but it is not me".split()
>>> nova = [(p.upper(), p.lower(), len(p)) for p in texto]
>>> print nova
[(THERE, there, 5),
(IS, is, 2),
(SOMEONE, someone, 7),
...
]
77 / 180
Classes
>>> p = Ponto()
>>> print p
<__main__.Ponto instance at 0x7f891f392098>
78 / 180
Classes
>>> p = Ponto()
>>> print p
<__main__.Ponto instance at 0x7f891f392098>
Construtor
class Ponto:
def __init__(self, x, y):
self.xCoord = x
self.yCoord = y
p = Ponto(2.0, 1.0)
79 / 180
Classes
80 / 180
Classes
def getX(self):
return self.xCoord
def getY(self):
return self.yCoord
p = Ponto(3.0, 1.5)
print p.getX(), p.getY()
81 / 180
Classes
82 / 180
Classes
Calcular a distncia
class Ponto:
# ...
def distancia(self, pt):
dx = self.xCoord - pt.xCoord
dy = self.yCoord - pt.yCoord
return math.sqrt(dx**2 + dy**2)
83 / 180
Classes
Calcular a distncia
class Ponto:
# ...
def distancia(self, pt):
dx = self.xCoord - pt.xCoord
dy = self.yCoord - pt.yCoord
return math.sqrt(dx**2 + dy**2)
p1 = Ponto(0,0); p2 = Ponto(1.0,1.0)
p2.shift(1.0, 1.0)
print "Distancia = ", p2.distancia(p1)
84 / 180
Classes
Usando mdulos
# Arquivo ponto.py
import math
class Point :
def __init__( self, x, y ):
self.xCoord = x
self.yCoord = y
85 / 180
Classes
Usando mdulos
p1 = Ponto(5,7)
p2 = Ponto(0,0)
x = p1.getX()
y = p1.getY()
print( "(" + str(x) + ", " + str(y) + ")" )
p1.shift(4, 12)
d = p1.distancia(p2)
86 / 180
Classes
Escondendo atributos
87 / 180
Classes
Escondendo atributos
>>> p = Ponto(2.0,2.0)
>>> print p.xcoord
2.0
>>> p.xCoord = zebra
>>> print p.xCoord
zebra
def pontoA(self):
return self.__pontoA
def pontoB(self):
return self.__pontoB
def comprimento(self):
return self.__pontoA.distancia(self.__pontoB)
def ehVertical(self):
return self.__pontoA.getX() == self.__pontoB.getX()
Exemplo
>>> p1 = Ponto(1.0,1.0)
>>> p2 = Ponto(0.0,0.0)
>>> p2.shift(1.0,1.0)
>>> if p1 == p2:
... print "Os pontos sao iguais."
90 / 180
Classes
Sobrecarga de operadores
class Ponto:
# ...
def __str__(self):
return "( %f , %f )" % (self.xCoord, self.yCoord)
# ...
91 / 180
Classes
Sobrecarga de operadores
92 / 180
Programao Funcional
93 / 180
Programao Funcional
map
94 / 180
Programao Funcional
map
95 / 180
Programao Funcional
filter
96 / 180
Programao Funcional
reduce
97 / 180
Programao Funcional
#map
seq = []
for num in range(5) :
seq = seq + [num * num]
print seq
#filter
seq = []
for num in range(5) :
if num % 2 == 0 :
seq = seq + [num]
print seq
#reduce
total = 0
for num in range(5) :
total = total + (num * num)
print total
98 / 180
Programao Funcional
99 / 180
Programao Funcional
100 / 180
Programao Funcional
101 / 180
Arquivos
102 / 180
Arquivos
Escrevendo em arquivos
outfile = open(notas.txt,w)
outfile.write(Notas da Prova\n)
outfile.write(- * 40 + \n)
for e in estudantes:
outfile.write(%s \t %6.2f \n % (e.nome, e.nota))
outfile.write(- * 40 + \n)
outfile.close
103 / 180
Arquivos
Lendo de arquivos
infile = open( "data.txt", "r" )
line = infile.readline()
while line != "" :
print( line )
line = infile.readline()
infile.close()
104 / 180
Arquivos
Lendo de arquivos
infile = open( "data.txt", "r" )
line = infile.readline()
while line != "" :
print( line )
line = infile.readline()
infile.close()
105 / 180
EXERCCIO
106 / 180
EXERCCIO
107 / 180
EXERCCIO
# le numero de pontos
total = int(line)
f.close()
return l
108 / 180
Parte III
Computao Cientfica com Python
109 / 180
Workflow Cientfico
110 / 180
O que NumPy?
Numerical Python
Biblioteca para manipulao de arrays
multidimensionais e matrizes.
Operaes rpidas em arrays (funes
vetorizadas)
Diferena com relao a listas tradicionais do
Python
Vetor homogneo
Muito mais eficientes do que as listas
Nmero de elemento deve ser conhecido a priori.
O array pode ser redimensionado posteriormente.
Muito eficiente (implementado em C)
111 / 180
Python Puro VS NumPy
112 / 180
Criando vetores NumPy
113 / 180
Criando vetores NumPy
114 / 180
Criando vetores NumPy
>>> m = a.reshape(2,3)
>>> print m
[[ 0. 0.2 0.4]
[ 0.6 0.8 1. ]]
>>> print m.size, m.ndim, m.shape
6 2 (2, 3)
>>> Z = np.zeros((3,3))
>>> print Z
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
115 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
116 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1]
array([ 6, 7, 8, 9, 10, 11])
117 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1]
array([ 6, 7, 8, 9, 10, 11])
>>> a[-1]
array([18, 19, 20, 21, 22, 23])
118 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1] # ou a[1,:]
array([ 6, 7, 8, 9, 10, 11])
>>> a[-1]
array([18, 19, 20, 21, 22, 23])
>>> a[:,1]
array([ 1, 7, 13, 19])
119 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1] # ou a[1,:]
array([ 6, 7, 8, 9, 10, 11])
>>> a[-1]
array([18, 19, 20, 21, 22, 23])
>>> a[:,1]
array([ 1, 7, 13, 19])
>>> a[1:3,:]
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
120 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1] # ou a[1,:]
array([ 6, 7, 8, 9, 10, 11])
>>> a[-1]
array([18, 19, 20, 21, 22, 23])
>>> a[:,1]
array([ 1, 7, 13, 19])
>>> a[1:3,:]
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
>>> a[1:4,2:5]
array([[ 8, 9, 10],
[14, 15, 16],
[20, 21, 22]])
121 / 180
Acessando arrays
>>> a = np.arange(24)
>>> a = a.reshape((4,6))
>>> a[2,4]
16
>>> a[1] # ou a[1,:]
array([ 6, 7, 8, 9, 10, 11])
>>> a[-1]
array([18, 19, 20, 21, 22, 23])
>>> a[:,1]
array([ 1, 7, 13, 19])
>>> a[1:3,:]
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
>>> a[::2,::3]
array([[ 0, 3],
[12, 15]])
122 / 180
Operaes com arrays
123 / 180
Operaes com arrays
Outras operaes
>>> a=np.array([1,0,1])
>>> b=np.array([2,2,4])
>>> np.dot(a,b)
6
>>> a = np.array([1,0,0])
>>> b = np.array([0,1,0])
>>> np.cross(a,b)
array([0, 0, 1])
124 / 180
Funes e Arrays NumPy
125 / 180
Vectorization
Aplicar f diretamente
em todo o vetor
Muito mais eficiente # importa versoes numpy de exp e sin
import numpy as np
Mais compacto e fcil
de ler def f(x):
return np.exp(np.sin(x))
Nem todas funes def
func(x) esto prontas x = linspace(0.0, 6.0, 1000)
y = f(x)
para serem usadas
desta forma
126 / 180
Vectorization
Aplicar f diretamente
em todo o vetor
Muito mais eficiente # importa versoes numpy de exp e sin
import numpy as np
Mais compacto e fcil
de ler def f(x):
return np.exp(np.sin(x))
Nem todas funes def
func(x) esto prontas x = linspace(0.0, 6.0, 1000)
y = f(x)
para serem usadas
desta forma
# funcao degrau
def H(x):
if (x < 0):
return 0
else
return 1
127 / 180
Vectorization
>>> x = linspace(-1,1,5)
array([-1. , -0.5, 0. , 0.5, 1. ])
>>> x < 0
array([ True, True, False, False, False])
128 / 180
Vectorization
Forma geral
def fun_vec(x):
cond = <exp_condicao>
x1 = <expressao1>
x2 = <expressao2>
return where(cond, x1, x2)
def Hv(x):
cond = x < 0
return where(cond, 0.0, 1.0)
129 / 180
Alguns mtodos dos vetores
130 / 180
Copiando Arrays
131 / 180
Matrizes
132 / 180
Matrizes
133 / 180
Matrizes e lgebra Linear
3 x + 2 y + 4z = 1 [ 3.]])
1 x + 1 y + 2z = 2 >>> x = linalg.solve(A,b)
>>> x
4x + 3 y 2 z = 3 matrix([[-3.],
[ 5.],
[ 0.]])
134 / 180
Polinmios
e avaliar o 8 x + 2
polinmio
>>> print F
Exemplo: 3 2
f (x ) = 4 x 2 + 2 x 1 1.333 x + 1 x - 1 x
135 / 180
Ajuste de Curvas
136 / 180
Ajuste de Curvas
>>> c1 = np.polyfit(x, y, 1)
>>> c1
array([-0.30285714, 0.75714286])
>>> p1 = np.poly1d(c1)
>>> c3 = np.polyfit(x, y, 3)
>>> c3
array([ 0.08703704, -0.81349206,
1.69312169, -0.03968254])
>>> p1 = np.poly1d(c3)
137 / 180
SciPy
138 / 180
Integrao Numrica com SciPy
? 4
Exemplo: x 2 dx
0
139 / 180
Integrao Numrica com SciPy
>>> y = fx2(x)
array([ 0. , 0.16666667, 0.33333333, 0.5 , 0.66666667,
0.83333333, 1. , 1.16666667, 1.33333333, 1.5 ,
1.66666667, 1.83333333, 2. , 2.16666667, 2.33333333,
2.5 , 2.66666667, 2.83333333, 3. , 3.16666667,
3.33333333, 3.5 , 3.66666667, 3.83333333, 4. ])
140 / 180
Processamento Digital de Imagens (ndimage)
141 / 180
Processamento Digital de Imagens
# aplica filtros
142 / 180
Visualizao de dados com matplotlib
143 / 180
matplotlib
>>> x = linspace(0,3,51)
>>> y = x**2 * exp(-x**2)
>>> plot(x,y)
[<matplotlib.lines.Line2D object...]
>>> show()
144 / 180
matplotlib
Decorando o grfico
>>> x = linspace(0,3,51)
>>> y = x**2 * exp(-x**2)
>>> plot(x,y)
>>> grid(True)
>>> xlabel(x)
>>> ylabel(f(x))
>>> title("Exemplo")
>>> show()
145 / 180
matplotlib
Vrias curvas
146 / 180
matplotlib
Cores
r vermelho c ciano
g verde m magenta
b azul y amarelo
w branco k preto
Smbolos
. pontos o circulo triangulo baixo
s quadrados + cruz v triangulo cima
x "xis" * estrela < triangulo esq
D diamante d diamante peq. > triangulo dir
Estilo da Linha
- solid line
- dashed line
-. dash-dot line
: dotted line
147 / 180
matplotlib
148 / 180
matplotlib
Histogramas
hist(x, bins=10)
Distribuio normal N (0 , 1 )
149 / 180
matplotlib
Grfico de barras
bar(x, height): plota um grfico de barras com
retngulos
xticks(x, labels): posiciona rtulos dos
retngulos
>>> x = [1,2,3,4,5,6]
>>> y = [5,8,15,20,12,18]
>>> bar(x,y,align=center,
color=#2090AA)
150 / 180
matplotlib
>>> savefig("seno1sx.png")
>>> savefig("seno1sx.pdf")
151 / 180
Galeria do matplotlib
152 / 180
Galeria do matplotlib
153 / 180
Galeria do matplotlib
matplotlib.sourceforge.net
154 / 180
Exemplo Completo
u ? (t ) = f (u (t ), t )
dada a condio Inicial
u (0 ) = u 0
Exemplo: Crescimento exponencial (populao)
u ? (t ) = au
onde a uma constante dada que representa a
taxa de crescimento de u.
155 / 180
Exemplo Completo
u k +1 = u k + t f (u k , t k )
onde:
u k a aproximao numrica da soluo exata u (t )
no tempo t k
t o passo de tempo
t k = k t , k = 0 , . . . , n
u (t ) = u 0 e a t
156 / 180
Exemplo Completo - Algoritmo
Dado: u 0 , a , T , t
Calcular n (nmero de passos de tempo)
Para k de 0 at n faa
Calcular u k +1 usando
u k +1 = u k + f (u k , t k )t
Exibir os resultados
157 / 180
Exemplo Completo - Python
u ? (t ) = u , u 0 = 1, T =3
158 / 180
Exemplo Completo
159 / 180
Exemplo Completo com SciPy
scipy.integrate.odeint(func, y0, t)
Usa a biblioteca odepack escrita em FORTRAN.
T = 3.0
u0 = 1.0
dt = 0.01
n = int(T/dt)
def f(u,t):
return u
t = np.linspace(0.0, T, n)
u = odeint(f,u0,t)
plot(t,u)
160 / 180
Parte IV
Outras bibliotecas e projetos com Python
161 / 180
Bibliotecas
De uso geral
Redes
Games
Interfaces Grficas
Tratamento de Imagens
Banco de Dados
etc, etc, etc.
Computao Cientfica
Computao Simblica
Visualizao
Computao Grfica
Soluo de Equaes Diferenciais Parciais
etc, etc, etc.
162 / 180
PyGame
http://networkx.lanl.gov/
http://www.pythonware.com/products/pil
Processamento de imanges.
Suporte a diversos formatos e possui diversas
ferramentas.
165 / 180
PyQt
http://www.riverbankcomputing.co.uk/software/pyqt/
166 / 180
Databases
c = conn.cursor()
# Create table
c.execute(CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real))
http://wwwsearch.sourceforge.net/mechanize/
br = mechanize.Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
assert br.viewing_html()
print br.title()
print response1.geturl()
print response1.info() # headers
print response1.read() # body
168 / 180
Bibliotecas para Computao Cientfica
169 / 180
Sympy
Computao Simblica
Alternativa livre aos softwares Maple,
Mathematica e Matlab.
Aritmtica bsica, expanses, funes,
derivadas, integrais, substituies, limite,
matrizes, etc.
170 / 180
Sage
171 / 180
Visualizao Cientfica
MayaVi
172 / 180
Computao Grfica, Visualizao
Computao grfica,
processamento de imagens e
visualizao.
Escrito em C++ com
interface em Tcl/Tk, Java e PyOpenGL: binding
Python. de OpenGL para
Python
OpenGL: API livre
utilizada na
computao grfica
173 / 180
lgebra Linear Computacional
174 / 180
Soluo Numrica de Equaes Diferenciais
FEniCS Project
Soluo automatizada
de EDPs usando o FiPy (A finite volume
mtodo dos elementos PDE solver written in
finitos Python)
Alto nvel de Solver de EDPs usando
abstrao (Muito o mtodo dos volumes
prximo da formulao finitos
matemtica) Orientado a objetos
Paralelismo, Computao paralela
adaptatividade,
estimativas de erro.
175 / 180
Apredizagem de Mquina
Scikits
Construdo sobre
Shogun: A Large Scale NumPy, SciPy e
Machine Learning Matplotlib
Toolbox
Diversas tcnicas como
SVM (Support Vector SVM, K-Means, etc
Machines)
http://www.shogun-toolbox.org/
http://scikit-learn.sourceforge.net
176 / 180
Python para Fsica
Astropysics:
http://packages.python.org/Astropysics/
Utilitrios de astrofsica em Python
PyFITS: http://packages.python.org/pyfits/
Manipulao de imagens FITS em Python
YT: http://yt-project.org/
yt um toolkit para manipular dados de
simulaes astrofsicas com suporte para anlise
e visualizao.
177 / 180
Python para Qumica
178 / 180
The Zen of Python
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases arent special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one- and preferably only one -obvious way to do it.
Although that way may not be obvious at first unless youre Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, its a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea - lets do more of those!
179 / 180
Referncias e Agradecimentos