Buscar

Prévia do material em texto

Numpy
ARRAY E MATRIZES
Numpy e Scipy
 Numpy é um módulo do Python que oferece recursos 
para manipulação de arrays e matrizes, além funções 
de álgebra linear
 Outro módulo usado é o Scipy (Scientific Python) , que 
extende as funcionalidades do Numpy com funções 
para minimização, regressão, transformações de Fourier 
e outras
 Os módulos Numpy e Scipy podem ser baixados em: 
http://www.scipy.org/download
http://www.scipy.org/download
Numpy e Scipy
 Existem ambientes que já vêm com o módulo Numpy e 
instalado, como o ambiente de desenvolvimento 
integrado Spyder
 Ele pode ser baixado pela iniciativa Anaconda, 
disponível em: https://www.continuum.io/downloads
 Spyder também já conta com o Matplotlib, além de 
Numpy
https://www.continuum.io/downloads
Numpy e Scipy
 Numpy e Scipy constituem alternativas ao MATLAB. 
Apesar de o MATLAB ter um grande número de 
ferramentas adicionais disponíveis, Numpy tem as 
seguintes vantagens:
 Python é uma linguagem mais moderna e completa
 É gratuito
 É open source
 Scipy adiciona ainda mais funcionalidades estilo MATLAB 
ao Python.
 Existe ainda o pacote de plotagem Matplotlib, que provê 
funções de plotagem parecidas com a do MATLAB.
Numpy
 É um pacote que inclui:
 Classe array
 Classe matrix
 Várias funções auxiliares
 Para importar:
 import numpy
 from numpy import *
Array
 A classe Array implementa um arranjo homogêneo 
mutável, com número arbitrário de elementos
 Semelhante ao conhecido tipo list do Python, porém:
 Possui métodos mais poderosos
 Homogêneo: todos os elementos devem ser do mesmo tipo
 Para criar um Array a partir de uma lista:
>>> lista = [0,1,2,3,4,5,6,7,8]
>>> a = numpy.array(lista)
>>> print a
[0 1 2 3 4 5 6 7 8]
Array
 Para criar um Array a partir de um intervalo:
>>> z = numpy.arange(0.0, 4.5, 0.5)
>>> print z
[0. 0.5 1. 1.5 2. 2.5 3. 3.5 4.]
 Para criar um Array só de 1’s:
>>> y = numpy.ones((2,3))
>>> print y
[[1. 1. 1.]
[1. 1. 1.]]
Array
 Para criar um Array só de 0’s:
>>> x = numpy.zeros((3,2))
>>> print x
[[0. 0.]
[0. 0.]
[0. 0.]]
 Para acessar elementos do Array:
>>> a = numpy.array([0,1,2,3,4,5])
>>> print a[2]
2
Array
 Para saber o tipo dos elementos do Array:
>>> print a.dtype
int32
 Para saber o formato do Array:
>>> a = numpy.array([0,1,2,3,4,5])
>>> print a.shape
(6,)
Array
 Percorrendo o Array:
>>> a = numpy.array([1,2,3,4,5])
>>> for i in range(a.size):
print a[i],
1 2 3 4 5
 Para redimensionar um Array:
>>> x = numpy.array([0,1,2,3,4,5,6,7,8])
>>> x.shape = 3,3
>>> print x
[[0 1 2]
[3 4 5]
[6 7 8]]
OU
>>> a = numpy.array([1,2,3,4,5])
>>> for i in a:
print i,
1 2 3 4 5
Array
 Transposta de um Array:
>>> x = numpy.array([0,1,2,3,4,5,6,7,8])
>>> x.shape = 3,3
>>> print x
[[0 1 2]
[3 4 5]
[6 7 8]]
>>> t = x.transpose()
>>> print t
[[0 3 6]
[1 4 7]
[2 5 8]]
Array
 Para “achatar” um Array (colocar em uma dimensão):
>>> x = numpy.array([0,1,2,3,4,5,6,7,8])
>>> x.shape = 3,3
>>> print x
[[0 1 2]
[3 4 5]
[6 7 8]]
>>> f = x.flatten()
>>> print f
[0 1 2 3 4 5 6 7 8]
Array
 Para criar arrays a partir de outros arrays usando funções:
>>> z = [0. 0.5 1. 1.5 2. 2.5 3. 3.5 4.]
>>> c = numpy.cos(z) #Usando a função cosseno
>>> print c
[1. 0.87758256 0.54030231 0.0707372 -0.41614684 
-0.80114362 -0.9899925 -0.93645669 -0.65364362]
>>> cos = numpy.round(c,1) #arredonda com 1 casa decimal
>>> print cos
[1. 0.9 0.5 0.1 -0.4 -0.8 -1. -0.9 -0.7]
Array
>>> a = numpy.array([0,1,2,3,4,5,6])
>>> print numpy.sqrt(a) #raiz quadrada
[0. 1. 1.41421356 1.73205081 2. 2.23606798 2.44948974]
>>> print numpy.mod(a,2) #resto da divisão por 2
[0 1 0 1 0 1 0]
>>> print numpy.negative(a) #transforma para negativo
[0,-1,-2,-3,-4,-5,-6]
Outras funções de Array
add(x,y) Adiciona argumentos, elemento por elemento
subtract(x,y) Subtrai argumentos, elemento por elemento
multiply(x,y) Multiplica argumentos, elemento por elemento
divide(x,y) Divide argumentos, elemento por elemento
power(x,y) Elementos do primeiro array, elevado à potência do 
segundo array
log2(x) Logaritmo na base 2 do array
exp(x) Exponencial de todos os elementos do array
sin(x) Seno de cada elemento do array
tan(x) Tangente de cada elemento do array
arctan(x) Arcotangente
sinh(x) Seno hiperbólico
deg2rad(x) Converte de graus para radianos
rad2deg(x) Converte de radianos para graus
Outras funções de Array
add(x,y) Adiciona argumentos, elemento por elemento
subtract(x,y) Subtrai argumentos, elemento por elemento
multiply(x,y) Multiplica argumentos, elemento por elemento
divide(x,y) Divide argumentos, elemento por elemento
power(x,y) Elementos do primeiro array, elevado à potência do 
segundo array
log2(x) Logaritmo na base 2 do array
exp(x) Exponencial de todos os elementos do array
sin(x) Seno de cada elemento do array
tan(x) Tangente de cada elemento do array
arctan(x) Arcotangente
sinh(x) Seno hiperbólico
deg2rad(x) Converte de graus para radianos
rad2deg(x) Converte de radianos para graus
As funções que recebem ângulo como parâmetro
esperam que seja fornecido em radianos.
Se você quiser saber o seno de 30º, por exemplo,
faça a conversão:
>>> numpy.sin(numpy.deg2rad(30))
0.5
Outras funções de Array
greater(x,y) Retorna o valor verdade de (x1 > x2)
greater_equal(x,y) Valor verdade de (x1 >= x2)
less(x,y) Valor verdade de (x1 < x2)
less_equal(x,y) Valor verdade de (x1 <= x2)
not_equal(x,y) Valor verdade de (x1 != x2)
equal(x,y) Valor verdade de (x1 == x2)
maximum(x,y) Retorna o máximo entre cada par de elementos dos 
arrays
minimum(x,y) Retorna o mínimo entre cada par de elementos dos 
arrays
Exercícios
1) Faça um programa que crie um array que representa 
uma progressão aritmética de 10 elementos, sendo o 
elemento inicial igual a 1 e razão igual à 3.
2) Faça um programa que crie um array bidimensional 3x3 
em que a diagonal principal e a secundária contém 1's e o 
resto contém 0. 
3) Faça um programa que crie três arrays A, B e C de 5 
elementos cada, e calcule o array resultante da expressão: 
A + B - C
Exercícios
4) Faça um programa que crie o array V = [2.5 3 5 6.3 7], e 
calcule o array W que contêm o cubo de cada elemento 
de V, com 2 casas decimais.
5) Considere os ângulos:
[ 0. 30. 60. 90. 120. 150. 180. 210. 240. 270. 300. 330.]
- Crie um array com estes ângulos.
- Transforme estes ângulos em radianos
- Calcule o seno destes ângulos, com 1 casa decimal
Matriz
 Criando uma matriz:
>>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> print m
[[1 2 3]
[4 5 6]
[7 8 9]]
Matriz
 Para acessar um elemento da Matriz:
>>> m = numpy.matrix([[1,2,3],[4,5,6]])
>>> print m[1,2]
6
 Para saber o formato da Matriz:
>>> print m.shape
(2,3)
Matriz
 Percorrendo a Matriz:
>>> m = numpy.matrix([[1,2],[3,4]])
>>> l,c = m.shape
>>> for i in range(l):
for j in range(c):
print m[i,j]
1
2
3
4
Matriz
 Transposta de uma Matriz:
>>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> tr = m.T
>>> print tr
[[1 4 7]
[2 5 8]
[3 6 9]]
Matriz
 Transposta de uma Matriz:
>>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> tr = m.T
>>> print tr
[[1 4 7]
[2 5 8]
[3 6 9]]
Atenção: T maiúsculo
Matriz
 Inversa de uma Matriz:
>>> m = numpy.matrix([[1,2],[3,4]])
>>> inv = m.I
>>> print inv
[[-2. 1. ]
[ 1.5 -0.5]]
Atenção: I maiúsculo
Matriz
 Multiplicação de matrizes:
>>> z = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> r = numpy.matrix([[3, 2, 1]])
>>> print r*z
[[18 24 30]]
Linalg
 Módulo para álgebra linear
 Para calcular determinante:
>>> a = numpy.matrix([[1,2],[3,4]])
>>> print a
[[1 2]
[3 4]]
>>> print numpy.linalg.det(a)
-2.0
Linalg
 Para resolver sistema linear:
 Suponha o sistema de equações:
3x + y = 9
x + 2y = 8
>>> a = numpy.matrix([[3,1],[1,2]])
>>> b = numpy.array([9,8])
>>> x = numpy.linalg.solve(a,b)
>>> print x
[ 2. 3.]
Linalg
 Para resolver sistema linear: Suponha o sistema de equações:
3x + y = 9
x + 2y = 8
>>> a = numpy.matrix([[3,1],[1,2]])
>>> b = numpy.array([9,8])
>>> x = numpy.linalg.solve(a,b)
>>> print x
[ 2. 3.]
Valores que acompanham 
as variáveis
Valores ao lado direito do 
sinal de igual
x = 2
y = 3
Exercícios
6) Faça um programa para resolver o seguinte sistema 
linear:
x + 10y - 12z = 120
4x - 2y - 20z = 60
-x + y + 5z = 10
Resposta: [ 340. 50. 60.]

Mais conteúdos dessa disciplina