Python-Aula1

Propaganda
VI Semana de Inverno de Geofísica
20 a 24 de Julho/2015 — INCT-GP, UNICAMP, Campinas, SP
Python para
a
Geoscientistas (1 Dia)
Prof. George Sand França SIS-UnB
Introdução
Maior produtividade para “geocientistas”
Sintaxe simplificada
Integração de dados de simulação,
visualização e análise
Formato – maior flexibilidade
2
Porque Python?
• Simulação, visualização e analise de dados
• Suporta diferentes formatos
• Oferece uma exaustiva biblioteca (library)
para criar interfaces gráficas (GUIs) de uma
forma profissional
• Serve como interface moderna para códigos
antigos.
3
Nesse curso não iremos ensinar conceitos
básicos para programação
• Tutorial prático
– Variáveis
– Loops
– Condicional (if/else), controle de fluxo (for,
while)
– Tipo de dados int, float, string, list / arrays
– Leitura/escrever dados para arquivos
4
Porque Python é tão perfeito para Ciência?
• Sintaxe legível:
– Existe um elemento em uma list/dict?
$python
>>> 3 in [1, 2, 3, 4, 5]
True
– Existe um substring no string?
>>> 'sub' in 'string'
False
– Valores booleanos legível e operadores lógicos
>>> a = True
>>> not a
False
>>> 'sub' not in ['string', 'hello', 'world']
True
5
Porque Python é tão perfeito para Ciência?
• Indexação? Posicionamento!
– Blocos de códigos são definido por sua indexação ou recuo.
– Não existe explicitadamente begin ou end, e nem chaves para informar
onde o bloco começa ou termina. O delimitador é dois pontos (:) e a
indexação (recuo) do código
>>> for i in [1, 2, 3, 4, 5]:
…
if i<3:
…
print i
…
else:
…
print i*2
1 2 6 8 10
• Sintaxe-semântica simplista e clara
• Código curtos = erros menores
• Rápido desenvolvimento, entendimento, digitação, encontra erros e fácil modificar...
6
Porque Python é tão perfeito para Ciência?
•
•
•
•
•
•
•
•
•
•
•
•
Um número grande de bibliotecas (libraries)
Compressão e Arquivamento de dados
Serviços de criptografia
Protocolos da Internet
Manipulação de dados da Internet
Ferramenta de processamento
Serviços Multimídia
Internacionalização
Ferramentas de desenvolvimento
Multi-tendência (multithreanding) e multiprocessamento
Expressões regularesInterfaces Gráficas com Tk ou Qt
...
7
Porque Python é tão perfeito para Ciência?
•
•
•
•
•
Bem documentado,
Plataforma API independente, mas otimizada para cada plataforma,
Um espaço para checar primeiro para testar uma solução,
Reutilizar em vez de reinventar,
Bibliotecas (módulos):
– NumPy / SciPy – Estrutura de vetores e matrizes, rotinas de álgebra linear, otimização
numérica, geração de números aleatórios, rotinas de estatísticas, modelagem de
equações diferenciais, Transformadas de Fourier e processamento de sinal,
processamento de imagem, matrizes , computação espacial, e outros infinidades de
rotinas matemáticas
– Matplotlib - biblioteca de plotagem 2D que produz figuras de qualidade de publicação
através de um conjunto de funções familiar aos usuários do MATLAB
– Interfaces para Matlab, Mathematica, o Maple, Octave ...
– mplot3d kit de ferramentas (matplotlib), Mayavi2, …
• Não há necessidade de mudar de linguagem, a fim de escrever código de
manipulação de matriz, comunicar com um servidor web ou automatizar uma
tarefa do sistema operacional ..
8
Porque Python é tão perfeito para Ciência?
• Velocidade
"Python é extramente lento e perde memória!"
>>>import os
>>>xvec = range(2000000)
>>>yvec = range(2000000)
>>>zvec = [0.5*(x+y) for x,y in zip(xvec,yvec)]
>>>os.system("ps v "+str(os.getpid()))
PID TTY STAT TIME MAJFL TRS
DRS RSS
%MEM COMMAND
16078 pts/0 S+ 0:00 12
2392 365675 341076 8.4
python
104 MB de memória usada! Correu em 8 segundos!
9
Porque Python é tão perfeito para Ciência?
• Velocidade
– Usando a ferramenta certa para o trabalho: Numpy
>>>import os
>>>from numpy import *
>>>xvec = arange(2000000)
>>>yvec = arange(2000000)
>>>zvec = (xvec+yvec)*0.5
>>>os.system("ps v "+str(os.getpid()))
– 37 MB memória usada! Executa cerca de 0.3s!
10
Porque Python é tão perfeito para Ciência?
• Tempo de implementação vs tempo de execução:
– Python é desenvolvido para produtividade
– Não existe compilação (separado)
– Não makefiles
– Sem problema de vínculos
– Rápido ciclos de desenvolvimento (Faster development cycles)
• Quanto a velocidade de execução importantes alertas:
– Uso de módulos especializados
– Uso especilizado JIT compiler, Cython ...
11
Porque Python é tão perfeito para Ciência?
• Interoperabilidade de linguagens
• Python tem uma integração com outras linguagens:
FORTRAN: F2py - Fortran para gerador da interface Python (part of
NumPy)
– Bibliotecas C ou C++: Cython, Ctypes, or SWIG são três caminhos
para isso
– R: RPy - simples, robusto interface Python para linguagem de
Programação. Ele pode gerenciar todos os tipos de objetos R e pode
executar funções R arbitrários (incluindo as funções gráficas).
12
Porque Python é tão perfeito para Ciência?
• Livre, open source ( Python Software Foundation License)
• Plataforma independente
• Disponibilidade: Componente padrão para muitos sistemas
operacionais
• Amplamente aplicável
– Pode ser usado com um terminal de calculadora
– Pode substituir shell script
– Pode ser criado para grande aplicações GUI
– Pode ser usado para fazer testes numéricos no estilo do Matlab
– Fácil para aprender – Iniciantes, e muito potente para usuários avançados
– Alto nível de programação
– Suporte para paradigmas de múltipla programação (object oriented,
imperative and functional)
13
IPython
•
Melhorando a interatividade shell Python; Principal características
– Introspecção dinâmica e ajuda(help) - Dynamic introspection
and help
– Busca através de módulos e namespaces
– Tab complementação
– Acesso completo ao sistema shell
– Session logging & restoring
– Impressões traceback exceção detalhado e coloridos
– Debugger incluído
– Altamente configurável, programáveis (Macros, Aliases)
14
IPython
• Obtendo ajuda( Help)
– Obter a ajudar para uma função
In[1]: command?
– Dê uma olhada na implementação:
In[2]: command??
– Pesquisa variáveis,funções,módulos iniciando com 'ab':
In[3]: ab<Tab>
– Quais objetos são atribuídos
In[4]: whos
– Qualis os atributos-métodos estão lá?
In[5]: object.<Tab>
– Obter help para um object/class method/attribute:
In[6]: object.command?
15
Começando – Tipos de dados: Números
• Entrar em um terminal
$python ou ipython
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 17
>>> type(a)
<type 'int'>
>>> a / 10
1
>>> a % 10
7
>>> a / 10.0
1.7
>>> _
# resultado da ultima operacao.
1.7
>>> type(_)
<type 'float'>
16
Começando – Tipos de dados: Números
>>> a = 3.0 + 4.0j
>>> float(a)
Traceback (most recent call last):
...
TypeError: can't convert complex to float
>>> a.real
3.0
>>> a.imag
4.0
>>> abs(a)
#sqrt(a.real ** 2 + a.imag ** 2)
5.0
17
Começando – Tipos de dados: Números
>>> a = 17
>>> a = a + 1
>>> a
18
>>> a += 2
>>> a
20
>>> a++
a++
ˆ
SyntaxError: invalid syntax
- PS: Os números são imutáveis
>>> a=5;b=a;a=6;a is b
False
18
Tipos de dados: Conversão de Números
>>> s = '13.8'
>>> f = float(s)
>>> i = int(s)
ValueError: invalid literal for int() with base 10: '13.8'
>>> i = int(f)
>>> i
13
>>> complex(s)
(13.8+0j)
Division
>>>p=3; q=6; p/q
0
>>>float(p)/q
0.5
19
Tipos de dados: string
>>> 'nada'
'nada'
>>> "doesn't"
"doesn't"
>>> 'doesn\'t'
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
20
Tipos de dados: string
>>> 'Georg' + 'e Sand'
'George Sand'
>>> 'Sand' * 5
'SandSandSandSandSand''
>>> a = "Escola de Inverno"
>>> a[0]
'E'
>>> a[0:1]
'E'
>>> a[1:5]
'scol'
>>> a[-7:]
'Inverno'
21
Tipos de dados: string
>>> a = 'SIg'
>>> a[3] = 'G'
# Os string não se altera !!
Traceback (most recent call last):
...
TypeError: 'str' object does not support
item assignment
>>> b = a[:-1] + 'G'
>>> b
'SIG'
>>> len(b)
3
22
Tipos de dados: string
• Strings são objetos com muitos módulos ou métodos de uso:
>>> a = "Escola de inverno 2015"
>>> a.find(Escola)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Escola' is not defined
>>> a.find('inverno')
10
#ipython → -1
>>> a.split()
['Escola', 'de', 'inverno', '2015']
>>> '*'.join(_)
'Escola*de*inverno*2015'
Existe mais módulos úteis como startswith, endswith,lower, upper, ljust,
rjust, center, .... ver Python Library Reference.
23
Tipos de dados: Lists
>>> a = ['chocoloate','ovo',100, 1234]
>>> a
['chocolate', 'ovo', 100, 1234]
>>> a[0]
'chocolate'
>>> a[3]
1234
>>> a[-2]
100
>>> a[:2]+['bacon',2*2]
['chocolate', 'ovo', 'bacon', 4]
>>> 2*a[:3]+['Boo!']
['chocolate', 'ovo', 100, 'chocolate', 'ovo', 100, 'Boo!']
24
Tipos de dados: Lists
>>> a
['chocolate', 'ovo', 100, 1234]
>>> a[2] = a[2] + 23 # listas são mutáveis
>>> a
['chocolate', 'ovo', 123, 1234]
>>> a[0:2]=[1,12] # substitui alguns itens
>>> a
[1, 12, 123, 1234]
>>> a[0:2]=[] # remove alguns
>>> a
[123, 1234]
>>> a[1:1]=['nada', 'legal'] # inseri alguns
>>> a
[123, 'nada', 'legal', 1234]
25
Tipos de dados: Lists
• Importantes operações list:
Acrescentando
>>> arglist=[];arglist.append(myvar)
Indexing
>>> filename = arglist(0)
Pesquisando
>>> i = arglist.index(ʻtmp.psʼ)
Apagando
>>> del arglist[i]
26
Tipos de dados: Lists
Slicing (cortando)
>>> a = 'demonstrando slicing em Python'.split()
>>> a[-1] # última entrada
'Python'
>>> a[:-1] # tudo EXCETO a última entrada
['demonstrando', 'slicing', 'em']
>>>a[:]
#tudo
['demonstrando', 'slicing', 'em', 'Python']
>>> a[2:] # tudo até menos as duas primeiras entradas
['em', 'Python']
>>>a[-2:] # duas últimas entradas
['em', 'Python']
>>> a[1:3]
['slicing', 'em'']
>>> a[:0] = ('aqui gente').split() # como adicionar e inicio no começo da lista
>>> a
['aqui', 'gente', 'demonstrando', 'slicing', 'em', 'Python']
• Existe mais módulos de list como append, insert, remove, sort, pop, index,
reverse,....veja Python Library reference
27
Tipos de dados: Tuples, Boolean, None
• Tuple:
Listas imutáveis criado por parênteses aleatórios
>>> t = (12345, 54321, 'hello!')
>>> t[0]
12345
>>> type(t)
<type 'tuple'>
• Boolean:
>>> type(True)
<type 'bool'>
• None:
>>> a = None
>>> type(a)
<type 'NoneType'>
28
Tipos de dados: Dictionary
>>> tel = {'ze':4098, 'maria':4139}
>>> tel
{'ze': 4098, 'maria': 4139}
>>> tel['ze']
4098
>>> del tel['maria']
>>> tel['maria']=4127
>>> tel
{'ze': 4098, 'maria': 4127}
>>> tel.keys()
['ze', 'maria']
>>> 'ze' in tel
True
29
Tipos de dados: Dictionary
• Importantes operações usando dictionary:
>>> d = {'dt': 10, 'xd': 20}
>>> d['dt'] #chave dt
10
>>> d.keys() # retorna a lista de chaves
['dt', 'xd']
>>> d.has_key('dt') # pesquisa pela chave específica
True
>>> d.get('dt',1.0) # olha para o valor 'dt' se não existe colocar o valor default 1.0
10
>>> d.get('gt',1.0)
1.0
>>> d.items() #lista os conteúdos de dictionary como lista de tuples.
[('dt', 10), ('xd', 20)]
30
Tipos de dados: NumPy Arrays
• Precisamos importa o módulo numpy para os seguintes
exemplos:
>>> import numpy as np
>>> from numpy import *
>>> a = array([2, 3, 4])
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
>>> b = array([(1.5, 2, 3),(4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
31
Tipos de dados: NumPy Arrays
>>> b.ndim
# numero de dimensões
2
>>> b.shape
# as dimensões
(2, 3)
>>> b.dtype
# o tipo (8 bytes floats)
dtype('float64')
>>> b.itemsize
# O tamanho do tipo
8
>>> c = np.array([[1,2],[3,4]], dtype=complex)
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
32
Tipos de dados: NumPy Arrays
>>> np.zeros((3,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones((2,3,4), dtype=int)
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
Tipos de dados: bool, uint8, uint16, uint32, uint64, int8, int16, int32, int64,float32,
float64, float96, complex64, complex128, complex192
33
Tipos de dados: NumPy Arrays
>>> np.arange(10,30,5)
array([10, 15, 20, 25])
>>> np.arange(0,2,0.3) # aceita argumentos float
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
>>> np.linspace(0,2,9) # 9 números entre 0 a 2.
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>> x = np.linspace(0, 2*np.pi,100)
>>> f = np.sin(x)
…....
34
Tipos de dados: NumPy Arrays
NOTE: Observe a diferença entre Lists e Numpy Arrays quando cortamos(slicing):
>>> a = [10,20,5]
>>> b = a
# b is refereciando a
>>> b is a
True
>>> a[2] = 30
>>> b = a[:]
# Isso é uma copia de a
>>> a == b
True
# b é uam copia de a
>>> a is b
False
>>> b[1] = 30
>>> b == a
False
35
Tipos de dados: NumPy Arrays
NOTE: Observe a diferença entre Lists e Numpy Arrays quando cortamos(slicing):
>>> from numpy import *
>>> a = asarray(a)
# faça um array da lista a
>>> b = a
# b está referenciando a
>>> b is a
True
>>> b = a[:]
>>> b[2] = 80
>>> b == a
array([ True, True, True], dtype=bool
>>> b = a.copy()
# this is now a true copy
>>> b == a
#b is a gives a False
True
>>> b[2] = 90
>>> b == a
False ----> array([ True, True, False], dtype=bool
36
Tipos de dados: NumPy Arrays
>>> A = np.array([[1,1],[0,1]])
>>> B = np.array([[2,0],[3,4]])
>>> A * B
# produto de elementos da matriz
array([[2, 0],
[0, 4]])
>>> np.dot(A,B) #produto de matrizes
array([[5, 4],
[3, 4]])
>>> np.mat(A) * np.mat(B) # produto de matrizes
matrix([[5, 4],
[3, 4]])
• Existem outras funções para a criação de matriz, conversões, manipulação, consulta,
pedidos, operações, estatística, álgebra linear básica. Consulte a documentação
NumPy.
37
Gráfico:Matplotlib
• Matplotlib é a biblioteca gráfica do Python.
– Sintaxe é muito próxima dos comandos gráficos do Matlab
– Usuários avançados pode controlar todos os detalhes dos gráficos (plots).
• Precisamos importar matplotlib para os seguintes exemplos:
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = [0, 2, 2.5]
>>> plt.plot(x);
[<matplotlib.lines.Line2D object at 0x42e54d0>]
>>> plt.show()
>>> x = [0, 2, 2.5]
>>> y = [3, -3.5, -1]
>>> plt.plot(x, y, 'r--o')
[<matplotlib.lines.Line2D object at 0x42cac10>]
>>> plt.show()
38
Gráfico:Matplotlib
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> t = np.arange(0.0, 2.0, 0.01)
>>> s = np.sin(2 * np.pi * t)
>>> plt.plot(t, s, linewidth=1.0)
[<matplotlib.lines.Line2D object at 0x2c04c90>]
>>> plt.xlabel('tempo (s)')
<matplotlib.text.Text object at 0x28cf750>
>>> plt.ylabel('voltagem (mV)')
<matplotlib.text.Text object at 0x28d4190>
>>> plt.title('Gráfico simples')
<matplotlib.text.Text object at 0x2be8fd0>
>>> plt.grid(True)
>>> plt.show()
Consulte o site do matplotlib para os comandos básicos de plotagem e especialmente a
Galeria da matplotlib para muitos, muitos exemplos de gráficos com código fonte!
39
Controle de fluxo: if
>>> x = int(raw_input("Por favor entre com um inteiro: "))
Por favor entre com um inteiro: 42
>>> if x < 0:
... print 'negativo'
... elif x == 0:
... print 'Zero'
... elif x == 1:
... print 'unitario'
... else:
... print 'Mais'
...
Mais
40
Fluxo de controle: for
>>> a = ['gato', 'janela', 'portaria']
>>> for x in a:
... print x, len(x)
...
gato 4
janela 6
portaria 8
>>> for i in range(0,6,2):
... print i
...
0
2
4
41
Fluxo de controle: while
>>> import time
>>> i = 1
>>> while True:
... i = i*1000 # o mesmo que i *= 1000
... print repr(i)
... time.sleep(1) #espere um segundo
...
1000
1000000
1000000000
1000000000000
1000000000000000
1000000000000000000
1000000000000000000000L
42
Fluxo de controle: continue & break
• O comando break – quebrar, rompe ….loop for ou while
>>> for i in range(0, 100000):
... if i> 50:
... print i
... break
...
51
• O comando continue mantem com a próxima interação do loop
>>> for i in range(0, 100000):
... if i!= 50:
... continue
... print i
...
50
43
Funções
• Definindo uma função que retorna uma série de Fibonacci até n.
>>> def fib2(n):
... """ Retorna a serie de Fibonacci até n."""
... result=[]
... a,b = 0,1
... while a < n:
... result.append(a)
... a, b = b, a+b
... return result
...
• Podemos chamar a função que definimos:
>>> fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
44
Funções
>>> def parabens(nome, idade=1):
... if idade < 40:
... msg = "Parabens, %s! Vc ainda é jovem por esta com %d de idade"
... else:
... msg = "Oi, %s! Ta no hora dos exames sua idade de %d anos diz que hora
meu amigo"
... print msg %(nome, idade)
...
>>> parabens("Julia")
Parabens, Julia! Vc ainda é jovem por esta com 1 de idade
>>> parabens(idade=8, nome="Julia")
Parabens, Julia! Vc ainda é jovem por esta com 8 de idade
>>> parabens("Sand",43)
OI, Sand! Ta no hora dos exames sua idade de 43 anos diz que hora meu amigo
45
Python in & out: manipulação de arquivos
• Use open(nomedoaquivo, modo) para abrir o aquivo.
Retorna um arquivo “Object”. “open(filename, mode) “
fh = open('/home/filename','r')
• Alguns possíveis modos
– r: abre o arquivo texto para ler.
– w: abre o arquivo texto para escrever.
– a: abre o arquivo texto para adicionar (anexar).
– rb: abre arquivo binário para ler.
– wb: abre arquivo binário para escrever.
• Use Close() para fechar o arquivo Object
fh,close()
46
Python in & out: manipulação de arquivos
• Ler a quantidade de dados de um arquivo:
>>> fh = open('/home/analistas/myarray.txt','r')
>>> s = fh.read(size) # size: números de bytes para ler
• Ler todo o arquivo:
>>> s = fh.read()
• Ler uma linha do arquivo:
>>> s = fh.readline()
• Obter todas linhas de datas do arquivo para uma lista:
>>> list = fh.readlines()
• Iterar cada linha no arquivo:
>>> for line in fh:
... print line,
47
Python in & out: salvando arquivos
• Escrever um string no arquivo
>>> fh = open('teste.txt','w')
>>> mystring = "NADA"
>>> fh.write(mystring)
• Escrever strings para o arquivo
>>> mysequence = ["ovos", "presunto", "nada"]
>>> fh.writelines(mysequence)
>>> fh.close()
>>> import os
>>> os.system('more teste.txt')
NADAovospresuntonada
48
Python in & out: Lendo e escrevendo
arquivos de dados ASCII
>>> import numpy as np
• Escrever um vetor no formato ASCII para um arquivo:
>>> x = np.arange(0, 1.4, 0.2)
>>> x
array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2])
>>> np.savetxt('myarray.txt', x)
• Carregar dados ASCII de um arquivo de vetor :
>>> x2 = np.loadtxt('myarray.txt')
>>> x2
array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2])
• Formato ASCII pode ser manipulado, veja help:
>>> help(np.savetxt) ou np.savetxt? ----> ipython
49
Python in & out: Lendo e escrevendo
arquivos de dados ASCII
• Escrever mais que de uma serie temporal para um arquivo:
>>> y = np.cos(x)
>>> np.savetxt('myarray2.txt', [x, y])
>>> z = np.column_stack([x, y])
>>> z
array([[ 0. , 1. ],
[ 0.2 , 0.98006658],
[ 0.4 , 0.92106099],
[ 0.6 , 0.82533561],
[ 0.8 , 0.69670671],
[ 1. , 0.54030231],
[ 1.2 , 0.36235775]])
>>> np.savetxt('myarray3.txt', z)
50
Python Erros & Exceções: Exceções
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
>>> 4 + muh*3
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'muh' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
51
Python Erros & Exceções:
Exceções manipulação
>>> def divide(x, y):
...:
try:
...:
result = x / y
...:
except ZeroDivisionError:
...:
print "division by zero!"
...:
except TypeError:
...:
print "unsupported type!"
...:
else:
...:
print "result is", result
>>> divide(2, 1)
result is 2
>>> divide(2, 0)
division by zero!
>>> divide(2, 'bbb')
unsupported type!
52
Numpy
• www.numpy.org
– É um pacote de ferramenta para computação científica com python.
Contém, entre outras coisas:
•
•
•
•
Poderosa um objeto de matriz N-dimensional poderosa
funções sofisticadas
ferramentas para a integração de código C / C ++ e Fortran
álgebra linear útil, transformada de Fourier, e capacidades de números
aleatórios
– Para além das suas utilizações científicas óbvias, NumPy também
pode ser utilizado como um recipiente multi-dimensional eficiente de
dados genéricos. Tipos de dados arbitrários podem ser definidos.
Isso permite que NumPy, de forma transparente e rápida integração
com uma ampla variedade de bancos de dados.
53
Numpy
• Primeiro importa o módulo numpy
>>> import numpy as np
• Então uma função func do numpy
precisa escrever como np.func.
>>> from numpy import *
>>> np.<TAB>
• np.lookfor? Ou help(np.lookfor)
54
Numpy - Vetor ou Matriz de uma dimensão
• np.linspace
• numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
num é opcional (int), número de amostras geradas, default é 50.
endpoint (bool) se True, para na última amostra.????
retstep – se True, (amostras, passo), retorna o passo é espaçamento entre amostras
dtype – o tipo de saída do vetor/matriz (array) [dtype=complex, float, int, ...]
SAÍDA (retorna)
Amostras igualmente espaçadas no intervalo fechado [start, stop] ou o intervalo semiaberto [iniciar, parar) (dependendo se endpoint é verdadeiro ou falso).
• Exemplos
>>> from numpy import *
>>> np.linspace(2.0, 3.0, num=5)
array([ 2. , 2.25, 2.5 , 2.75, 3. ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False)
array([ 2. , 2.2, 2.4, 2.6, 2.8])
>>>
55
Numpy - Vetor ou Matriz de uma dimensão
• np.range, np.zeros e np.array
numpy.arange([start, ]stop, [step, ]dtype=None)
>>> np.arange(1,10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(1,10,dtype=complex)
array([ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j,
8.+0.j, 9.+0.j])
numpy.zeros(shape, dtype=float, order='C')
>>> np.zeros(10,dtype=float)
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> np.zeros((2,2))
array([[ 0., 0.],
[ 0., 0.]])
56
Numpy - Vetor ou Matriz de uma dimensão
numpy.array(object, dtype=None, copy=True, order=None, subok=False,
ndmin=0)
object : array_like
copy : bool, optional
se True (default), então o object será copiado
>>> la = np.array([1,2,3,4])
>>> la
array([1, 2, 3, 4])
>>> x = np.linspace(0,1,11)
>>> x
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
>>> cx = np.array(x, dtype=complex)
>>> cx
array([ 0.0+0.j, 0.1+0.j, 0.2+0.j, 0.3+0.j, 0.4+0.j, 0.5+0.j,
0.6+0.j, 0.7+0.j, 0.8+0.j, 0.9+0.j, 1.0+0.j])
57
Funções universais(Ufuncs)
• http://docs.scipy.org/doc/numpy/reference/
ufuncs.html
• sign, cos, cosh, exp, power, angle, abs,
fix, log...... → np.sign?
58
Operadores lógicos
• x<0, se x for escalar está ok, e o resultado será True ou
False.
>>> x=np.linspace(-2,2,401)
>>> y=x<0
>>> x
>>> y
Função select -np.select([C0,C1,C2],[R0,R1,R2],default=0)
>>>x=np.linspace(-1,3,9)
>>>y=np.select([ x>=2, x>=1, x>0, x<0], [ 4.0, x**2, x**3,
-x])
Existe também np.piecewise
59
Vetor e Matrizes (revisao)
>>> x=np.array([[0,1,2,3],[10,11,12,13],[20,12,22,23]])
>>> x.ndim
>>> x.shape
>>> x.dtype
>>> x
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 12, 22, 23]])
>>> x[2]
array([20, 12, 22, 23])
>>> x[ : ,1]
array([ 1, 11, 12])
>>> x[2][1]
12
>>> x[2,1]
12
60
Operações básicas
>>> x = np.array([2,4,3], float)
>>> x.sum()
9.0
>>> x.prod()
24.0
>>> np.sum(x)
9.0
>>> x.mean()
3.0
>>> x.var()
0.66666666666666663
>>> x.std()
0.81649658092772603
x.min(), x.max()
np.?????? (unique, diagonal,sorted....)
>>> x = np.array([[0,2], [3,-1],
[3,5]],float)
>>> x.mean(axis=0)
array([ 2., 2.])
>>> x
array([[ 0., 2.],
[ 3., -1.],
[ 3., 5.]])
>>>x.mean(axis=1)
array([ 1., 1., 4.])
>>> x.min(axis=1)
Array([ 0.,-1., 3.])
>>> x.max(axis=0)
array([ 3., 5.])
61
Seleção e manipulação
>>> x = np.array([[6, 4], [5, 9]], float)
>>> x >= 6
array([[ True, False],
[False, True]], dtype=bool)
>>> x[x >=6]
array([ 6., 9.])
Mais complicado um pouquinho
>>> x[np.logical_and(x > 5, x< 9)]
array([ 6.])
>>> x = np.array([2, 4, 6, 8], float)
>>> y = np.array([0, 0, 1, 3, 2, 1], int)
>>> x[y]
array([ 2., 2., 4., 8., 6., 4.]) → get position
x.take e x.put.............
62
Calculo de Matriz e vetores
>>> a = np.array([1, 4, 0], float)
>>> b = np.array([2, 2, 1], float)
#Multiplicação, outer, inner e cross
>>> np.dot(a,b)
10.0
>>> np.outer(a,b)
array([[ 2., 2., 1.],
[ 8., 8., 4.],
[ 0., 0., 0.]])
>>> np.inner(a,b)
10.0
>>> np.cross(a,b)
array([ 4., -1., -6.])
• Numpy vem com uma série de
rotinas internas para calculo de
álgebra linear, que pode ser
encontradas no sub-módulo linalg.
>>> x = np.array([[4, 2, 0], [9, 3, 7],
[1, 2, 1]], float)
>>> x
array([[ 4., 2., 0.],
[ 9., 3., 7.],
[ 1., 2., 1.]])
>>> np.linalg.det(x)
-48.000000000000028
>>>np.linalg.eig(x)
np.linalg.inv(x), np.linalg.svd ...
63
Polinômios
>>> roots=[0,1,1,2]
>>> coeffs=np.poly(roots)
>>> coeffs
array([ 1, -4, 5, -2, 0])
>>> np.roots(coeffs)
array([ 2. +0.00000000e+00j, 1.
+2.83263462e-08j, 1. -2.83263462e-08j,
0. +0.00000000e+00j])
….
64
Estatísticas e aleatórios
>>> x=np.array([1,4,3,8,9,2,3], float)
>>> np.median(x)
3.0
>>> a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float)
>>> np.corrcoef(a)
array([[ 1.
, 0.72870505],
[ 0.72870505, 1.
]])
>>> np.random.rand(5)
→ aleatório
array([ 0.33677247, 0.52693437, 0.79529578, 0.78867702, 0.02147624])
>>> np.random.rand(2,3)
array([[ 0.84612516, 0.0704939 , 0.1526965 ],
[ 0.77831701, 0.80821151, 0.82198398]])
>>> np.random.random()
0.9023965286127028
>>> np.random.randint(5, 10)
5
65
Gráficos
• Gráfico simples
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = np.linspace(-np.pi,np.pi,101)
>>> y = np.sin(x)+np.sin(3*x)/3.0
>>> plt.ion()
>>> plt.plot(x,y)
[<matplotlib.lines.Line2D object at 0x3467dd0>]
>>> plt.savefig('foo.pdf')
#plt.show ou plt.,ion() para o saída do gráfico.
Para ….
66
Gráficos cartesianos
67
Gráficos cartesianos
>>> import pagina67
68
Grafico POLAR
69
Barras de erros
70
Texto e Anotações
71
Contornos
72
Varios Graficos
73
Varios Graficos
74
Animações
75
Videos
76
Por hoje é só
77
Download