2016/2
Aula 07 – Matrizes
Atualização: 06/fev/2017
Introdução
2
Conteúdo
Introdução
3
Matrizes guardam dados
bidimensionais
Certos problemas
exigem que os dados
sejam organizados na
forma de matriz
bidimensional:
Temperatura medida em
diferentes localidades e em
diversos momentos.
Tempo de disparo de um
projétil e as respectivas
posições x e y no espaço.
Matrizes
:: Notação Matemática
Em notação matemática, em uma matriz A qualquer,
cada elemento é indicado por aij.
O índice i indica a linha.
O índice j indica a coluna.
Mais detalhes:
docs.scipy.org/doc/numpy/reference/
6
Conteúdo
Introdução
7
Matrizes em Python
:: Declaração de matrizes
Cada linha da matriz é um vetor:
Os elementos de uma mesma linha devem ser
separados por vírgula e estar dentro de colchetes.
Lembre-se de
importar a numpy 3 −4 0
𝐴=
5 2 −1
Como criar uma matriz?
:: Direto no script
Quadro de medalhas das
Olimpíadas de 2016: from numpy import *
quadro = array([
Ouro Prata Bronze [46, 37, 38],
EUA 46 37 38 [27, 23, 17],
Grã-Bretanha 27 23 17 [26, 18, 26],
[19, 18, 19],
China 26 18 26
[17, 10, 15],
Rússia 19 18 19 [12, 8, 21],
Alemanha 17 10 15 [10, 18, 14]
Japão 12 08 21 ])
França 10 18 14
9
Como criar uma matriz?
:: Via teclado
Os elementos de uma
mesma linha devem from numpy import *
colchetes.
As linhas devem ser
separadas por vírgula. [[3, -4, 0],
[5, 2, -1]]
Como criar uma matriz?
:: Zeros ou uns
print(m0) print(m1)
Use os dois
conjuntos de
parênteses!
[[ 0. 0.] [[ 1. 1. 1. 1. 1.]
[ 0. 0.] [ 1. 1. 1. 1. 1.]]
[ 0. 0.]]
Conteúdo
Introdução
12
Como acessar elementos da matriz?
x = mat[3,1] 0
15
Soma de uma linha
Qual a linha que corresponde às medalhas da Russia?
Linha 3 0 MEDALHAS-1
16
Soma de uma linha
:: Script
# Constantes (facilitam manutencao)
PAISES = shape(quadro)[0]
MEDALHAS = shape(quadro)[1]
total = 0
print(total)
17
Problema 02
:: Soma de uma coluna
Qual o total de medalhas Ouro Prata Bronze
EUA 46 37 38
de ouro dos sete
Grã-Bretanha 27 23 17
primeiros colocados nas
China 26 18 26
Olimpíadas de 2016? Rússia 19 18 19
Alemanha 17 10 15
Japão 12 08 21
França 10 18 14
18
Soma de uma coluna
Qual o total de medalhas do tipo j entre os sete países?
coluna j
[0,j] 0
[1,j]
[2,j]
[3,j]
[4,j]
[5,j]
[6,j] PAISES - 1
Soma de uma coluna
:: Script
# Constantes (facilitam manutencao)
PAISES = shape(quadro)[0]
MEDALHAS = shape(quadro)[1]
ouro = 0
print(ouro)
Seleção de elementos
Seleção de todos os 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
elementos da linha i: 𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
x = quadro[i,:] 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
Seleção de todos os 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
elementos da coluna j: 𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙
𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
x = quadro[:,j] 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙 𝒙
Problema 03
:: Soma de cada linha
Qual o total de medalhas Ouro Prata Bronze
de cada país? EUA 46 37 38
Grã-Bretanha 27 23 17
China 26 18 26
Rússia 19 18 19
Alemanha 17 10 15
Japão 12 08 21
França 10 18 14
22
Soma de uma coluna
:: Script
# Constantes (facilitam manutencao)
PAISES = shape(quadro)[0]
Diagonal principal: i = j
Elementos acima: i < j
Elementos abaixo: i > j
26
Problema 04
:: Script
from numpy import *
# Preenchimento da matriz
for i in range(DIM):
for j in range(DIM):
# Verifica se termo estah ABAIXO
if (i > j):
mat[i,j] = 1
# Verifica se termo estah ACIMA
elif (i < j):
mat[i,j] = -1
# Elementos da diagonal principal
else:
mat[i,j] = 0
27
Problema 05
:: Qual a nota de cada aluno?
Oito estudantes responderam a um teste de dez
perguntas. As respostas são armazenadas em uma
matriz. Cada linha registra as respostas de um aluno para
as questões.
Problema 05 (cont.)
O gabarito é armazenado em um vetor de dez elementos.
Considerando que cada questão vale um ponto, qual a
nota de cada aluno?
Problema 05
:: Projetar algoritmo
1. Definir matriz de respostas (resp)
2. Definir vetor de gabarito (gab)
3. Definir um vetor de notas (notas), com número de
elementos igual ao número de linhas da matriz resp
4. Para cada aluno (linha) na matriz resp:
A. Para cada resposta (coluna) na matriz resp:
i. Comparar resposta do aluno com gabarito
ii. Se forem iguais, incrementar posição correspondente no vetor
notas
iii. Caso contrário, não faz nada
B. Imprimir nota do aluno
Problema 05
:: Script – definições
from numpy import *
Introdução
Estruturais Matriciais
• Operações • Seguem as
entre matrizes regras
executadas normais da
elemento a álgebra linear
elemento
Matrizes em Python
:: Operações estruturais e matriciais
Operação Em Python Comentários
Soma a + b Soma estrutural e soma matricial
são idênticas.
Subtração a – b Subtração estrutural e subtração
matricial são idênticas.
Multiplicação a * b Multiplicação elemento a
estrutural elemento de a e b. As duas
matrizes precisam ter as mesmas
dimensões.
Multiplicação dot(a,b) Multiplicação das matrizes a e b. O
matricial número de colunas em a precisa
ser igual ao de linhas em b.
Matrizes em Python
:: Operações
tp[i,j] = mat[j,i]
Matriz tp
a[0,0] a[1,0] a[2,0] a[3,0]
a[0,1] a[1,1] a[2,1] a[3,1]
a[0,2] a[1,2] a[2,2] a[3,2]
tp = mat.T
Problema 06
:: Script
from numpy import *
# Impressao do resultado
print(mat.T)
Problema 07
:: Sistemas de Equações Lineares
Uma fabrica produz de três tipos de componentes: A, B e C.
Três tipos de matérias primas: metal, plástico e borracha.
As quantidades (em grama) de material exigido para produzir
cada componente são:
Componente Metal Plástico Borracha
A 1 1 2
B 1 2 1
C 2 1 1
Se houver disponíveis 900g, 800g e 700g de metal, plástico e
borracha, respectivamente, quantos componentes podem ser
produzidos?
Sistemas de Equações Lineares
:: Solução
1 ∙ 𝑎 + 1 ∙ 𝑏 + 2 ∙ 𝑐 = 900
1 ∙ 𝑎 + 2 ∙ 𝑏 + 1 ∙ 𝑐 = 800
2 ∙ 𝑎 + 1 ∙ 𝑏 + 1 ∙ 𝑐 = 700
1 1 2 𝑎 900
1 2 1 ∙ 𝑏 = 800
2 1 1 𝑐 700
𝐴∙𝑥 =𝐵
𝑥 = 𝐴−1 𝐵
Sistemas de Equações Lineares
:: Solução em Python
O módulo numpy.linalg deve ser usado para resolver
a equação:
𝑥 = 𝐴−1 𝐵
x = dot(inv(A), B)
Problema 07
:: Script
from numpy import *
from numpy.linalg import *
# Impressao do resultado
print(x)
Referências bibliográficas
Menezes, Nilo Ney Coutinho (2014). Introdução à
Programação com Python, 2 ed. Editora Novatec.
HETLAND, Magnus Lie (2008). Beginning Python: From
Novice to Professional. Springer eBooks, 2ª edição.
Disponível em: http://dx.doi.org/10.1007/978-1-4302-
0634-7.
Horstmann, Cay & Necaise, Rance D. (2013). Python for
Everyone. John Wiley & Sons.
Liang, Y. D. (2013). Introduction to Programming Using
Python. Pearson
Dúvidas?