Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno...

Post on 18-Jan-2019

219 views 0 download

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.]