Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno...
Transcript of Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno...
NumpyARRAY 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
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
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.]