Vous êtes sur la page 1sur 20

Python - Matrizes e vetores

George Sand
Introduo
Vamos mostra que podemos executar em Python com o mdulo
NumPy todos as operaes com Matriz:

adio Matriz
subtrao Matriz
multiplicao de matrizes
Produto escalar
Produto vetorial e um monte de outras operaes sobre
matrizes

Os operadores padro: + - * / ** %
Comenando
import numpy as np
x = np.array([1,5,2])
y = np.array([7,4,1])
x + y
---array([8, 9, 3])
x * y
---array([ 7, 20, 2])
x - y
----array([-6, 1, 1])
x / y
----array([0, 1, 2])
x % y
----array([1, 1, 0])
Produdto escalar
x = np.array([1,2,3])
y = np.array([-7,8,9])
dot = np.dot(x,y)
x_modulo = np.sqrt((x*x).sum())
y_modulo = np.sqrt((y*y).sum())
cos_angulo = dot / x_modulo / y_modulo
# Cosseno do angulo entre X e Y
angulo = np.arccos(cos_angulo)
angulo
0.80823378901082499
angulo * 360 / 2 / np.pi # angulo em graus
46.308384970187326
Matriz
x = np.array( ((2,3), (3, 5)) )
y = np.array( ((1,2), (5, -1)) )
x * y
array([[ 2, 6],
[15, -5]])
x = np.matrix( ((2,3), (3, 5)) )
y = np.matrix( ((1,2), (5, -1)) )
x * y
matrix([[17, 1],
[28, 1]])
Produto de Matrizes
x = np.array( ((2,3), (3, 5)) )
y = np.matrix( ((1,2), (5, -1)) )
np.dot(x,y)
matrix([[17, 1],
[28, 1]])

Outra altenativa
np.mat(x) * np.mat(y)
matrix([[17, 1],
[28, 1]])
Aplicao Prtica para Multiplicao
Seja 4 pessoas, Zezinho, Mia, Maria e Luana. Cada um deles
comprou chocolates a partir de uma escolha de trs. A marca
so A, B e C. Zezinho comprou 100 g da marca A, 175 g da
marca B e 210 da C. Mia escolheu 90 g de A, 160 g de B e 150
g de C. Maria comprou 200 g de A, 50 B e de 100 g de C.
Luana, aparentemente, no gostou da marca B, porque ela no
tinha comprado qualquer um desses. Mas ela parece ser f da
marca C, pois ela comprou 310 g. Alm disso, ela comprou 120
g de A. Ento, o preo destes chocolates: A custa 2,98 por
100 g, B custa 3,90 e C s 1,99. Calcule o quanto cada um
deles tinha que pagar:
Resposta
NumPessoas =
np.array([[100,175,210],[90,160,150],[200,50,100],[120,0,310
]])
Preco_per_100_g =
np.array([2.98,3.90,1.99])
Preco_em_centavos =
np.dot(NumPessoas,Preco_per_100_g)
Preco_em_Real = Preco_em_centavos /
np.array([100,100,100,100])
Prece_em_Real
array([ 13.984, 11.907, 9.9 , 9.745])
Produto vetorial
x = np.array([0,0,1])
y = np.array([0,1,0])

np.cross(x,y)
array([-1, 0, 0])

np.cross(y,x)
array([1, 0, 0])
Criando Vetores (arrays) em Numpy
Arrays NumPy podem ser criados a partir de estruturas de
dados do Python (listas, tuplas) ou a partir de funes
especfics para criao de de arrays.

zeros((m,n)) vetor de 0 (zero),com m linhas, n colunas


ones((m,n)) vetor de 1 (um), com m linha e n colunas
empty((m,n)) vetor vazio, com m linhas e n colunas
zeros_like(A) vetor de 0 (zero), no mesmo formato de A
ones_like(A) vetor de 1 (um), no mesmo formato de A
empty_like(A) vetor vazio, no mesmo formato de A
Criando Vetores (arrays) em Numpy
random.random((m,n)) vetor mxn de nmeros aleatrio
identity(n) matriz identidade de ordem n, ponto
flutuante
array([[1,2,3],[4,5,6]]) cria um array a partir de um
lista ou umatupla
arrange(i,f,p) vetor com incio i, final f e passo p
linspace(i,f,n) vetor com n nmeros de i at f
Mais exemplos
Criar um vetor com valores passados por parmetros (36.4,
21.6, 15.6, 27.6)
a = np.array([36.4,21.6, 15.6, 27.6])
print a
Criar um vetor de zeros de tam=4
az = np.zeros(4)
Criar um vetor com valores de 0 a 10
a = np.arange(10)
Criar um vetor de 0 a 1, passo = 0.2
a = np.arange(0.0, 1.0, 0.2)
Criar um vetor de 6 nmeros de 0 a 1
a = linspace(0.0,1.0,6)
Criando vetores (arrays) em Numpy
Outros mtodos de arrays:

a.size tamanho do array


a.ndim dimenso do array
a.reshape alterar a ordem do array

print a.size, a.ndim, m.shape


m = a.reshape(2,3)]
Vetor de 0 e do ordem 3
Z = np.zeros(3,3)
print Z
Acesso a arrays
a[x,y] acessa o elemento na posio x,y de a
a[x,:] ou a[x] acessa a linha x de a
a[:,y] acessa a coluna y de a
a[-1] acessa a ltima linha de a
a[x:x,:] acessa as linhas de x at a anterior de x
a[::x,::y] acessa os elementos nas linhas 0 e x, e nas
colunas 0 e y
Operaes com Arryas
NumPy suporta operaes entre arrays sem uso de loops (como
em c, por exemplo).

a+n soma n unidades aos elementos de a


a*n multiplica os elementos de a por um escalar n
a*b multiplica um array a por outro array b
a**n eleva os elementos de a, a n-sima potncia
dot(a,b) produto escalar entre a e b
cross(a,b) produto vetorial entre a e b
outer(a,b) multiplica cada elemento de a por cada
elemento de b, e cria uma matriz onde cada produto uma
linha.
Operaes com Arrays
a = [4,5,6]

b = [7,8,9]

print np.outer(a,b)
M todos dos vetores
a.sum() retorna a soma dos elementos de a
a.min() retorna o menor elemento de a
a.max() retorna o maior elemento de a
a.mean() retorna a mdia dos elementos de a
a.std() retorna o desvio padro dos elementos de a
a.var() retorna a varincia dos elementos de a
a.trace() trao de a
a.copy() retorna a cpia de a
a.conjugate() retorna o complexo conjugado de a
Matrizes
Os arrays apresentados at agora so do tipo ndarray.H um
tipo de array bidimensional chamado matrix, que possui
algumas propriedas especiais de matrizes:
matrix.I inversa
matrix.T transposta
matrix.H conjugada
matrix.A transforma a matriz em um array
O operador * efetua operaes usuais de lgebra linear,
tipo matriz-matriz, matriz-vetor, vetor-matriz.
O mdulo numpy.linalg possui diversas funes de lgebra
linear, como a soluo de sistemas de equaes lineares por
exemplo. x = linalg.solve((A,B))
Exerccios
1. Seja a matriz ([1,2,3.2], [4,5,2.3], [1,2,5]) calcule o
determinante (usando o python).
2. Crie um vetor com 200 amostras de 1 a 1000?
3. Multiplique a matriz do exerccio 1 por uma matriz
unitria
4. Calcule a inversa da matriz do exerccio 1
5. Calcule o produto vetorial de [3,5,6.7] e [2,3,4.6]
6. Criar uma matriz 5(i) por 5(j) em que os elementos so
i+j. (Dica use o for e if)
Salvando Dados arquivo de texto com savetxt
import numpy as np
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], np.int32)
np.savetxt("test.txt", x)

np.savetxt("test2.txt", x, fmt="%2.3f",
delimiter=",")
np.savetxt("test3.txt", x, fmt="%04d", delimiter=" :-) ")

http://www.python-course.eu/

Vous aimerez peut-être aussi