30
Numpy ARRAY E MATRIZES

Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

  • Upload
    hanhu

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

NumpyARRAY E MATRIZES

Page 2: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 3: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 4: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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.

Page 5: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

Numpy

É um pacote que inclui:

Classe array

Classe matrix

Várias funções auxiliares

Para importar:

import numpy

from numpy import *

Page 6: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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]

Page 7: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 8: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 9: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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,)

Page 10: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 11: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 12: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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]

Page 13: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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]

Page 14: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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]

Page 15: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 16: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 17: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 18: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 19: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 20: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 21: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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)

Page 22: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 23: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 24: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 25: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 26: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 27: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 28: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 29: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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

Page 30: Orientação a Objetos – parte 2 - Numpy.pdf · ... Tangente de cada elemento do array ... Seno hiperbólico deg2rad(x) Converte de graus para radianos ... 90. 120. 150. 180. 210

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