Buscar

Aula07 Matrizes Python

Prévia do material em texto

Introdução à Computação com Python
Aula 07 – Matrizes
CNCCC 2016
Conteúdo
Introdução
Como criar uma matriz?
Como acessar elementos da matriz?
Trabalhando com matrizes
2
Conteúdo
Introdução
Como criar uma matriz?
Como acessar elementos da matriz?
Trabalhando com matrizes
Aplicações de Álgebra Linear
3
Dados bidimensionais
 Algumas aplicações demandam que os dados 
sejam organizados em um formato 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.
4
Matrizes
:: Notação Matemática
 Na Matemática, uma matriz Am×n é composta por 
m linhas e n colunas.
 Exemplo:









125
043
32A
5
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.















mnmm
n
n
nm
aaa
aaa
aaa
A




21
22221
11211
6
Matrizes em Python
 Para a manipulação de matrizes, utilizar as 
bibliotecas:
 numpy – manipulação de vetores e matrizes,
from numpy import *
7
Conteúdo
Introdução
Como criar uma matriz?
Como acessar elementos da matriz?
Trabalhando com matrizes
8
Matrizes em Python
:: Declaração de matrizes
 Em Python, os elementos das matrizes são 
organizados linha a linha.
 Os elementos de uma mesma linha devem ser 
separados por vírgula e estar dentro de colchetes.
 As linhas devem ser separadas por vírgula.
𝐴 =
3 −4 0
5 2 −1
A = array([[3, -4, 0], [5, 2, -1]])
9
Lembrar de 
importar a numpy
 Seja o quadro de medalhas dos sete primeiros 
colocados nas Olimpíadas de 2012.
Como criar uma matriz?
Ouro Prata Bronze
EUA 46 29 29
China 38 27 23
Grã-Bretanha 29 17 19
Rússia 24 26 32
Coreia do Sul 13 08 07
Alemanha 11 19 14
França 11 11 12
quadro = array([
[46, 29, 29],
[38, 27, 23],
[29, 17, 19],
[24, 26, 32],
[13, 8, 7],
[11, 19, 14],
[11, 11, 12]
])
10
Como criar uma matriz?
 Matrizes são 
organizadas em linhas.
 Uma matriz é criada 
como um vetor de 
linhas.
quadro = array([
[46, 29, 29],
[38, 27, 23],
[29, 17, 19],
[24, 26, 32],
[13, 8, 7],
[11, 19, 14],
[11, 11, 12]
])
Linha
11
Como criar uma matriz?
:: Direto no script
from numpy import *
# Criacao da matriz 
quadro 
quadro = array([
[46, 29, 29],
[38, 27, 23],
[29, 17, 19],
[24, 26, 32],
[13, 8, 7],
[11, 19, 14],
[11, 11, 12]
])
12
Como criar uma matriz?
:: Valores aleatórios
from numpy import *
from random import *
N = 2
mat = zeros((N,N), dtype=int)
# Cria matriz 2x2 com valores aleatorios em [-5;5]
for i in range(N):
for j in range(N):
# Atribuir no. aleatorio na linha i
mat[i,j] = randint(-5,5)
13
Como criar uma matriz?
:: Via teclado
from numpy import *
# Criacao da matriz quadro
quadro = array(eval(input("Digite a matriz: ")))
 Os elementos de uma mesma linha devem ser 
separados por vírgula.
 Cada linha da matriz deve estar entre colchetes.
 As linhas devem ser separadas por vírgula.
>> [3, -4, 0], [5, 2, -1]
14
Quais as dimensões de uma matriz?
 Número de elementos:
 Número de linhas e de colunas:
 Número de linhas:
 Número de colunas:
FORMA = shape(quadro)
TAM = size(quadro)
15
LIN = quadro.shape[0]
COL = quadro.shape[1]
Funções para inicialização
16
• Gera uma matriz n x n de zeroszeros((n,n))
• Gera uma matriz m x n de zeroszeros((m,n))
• Gera uma matriz n x n de unsones((n,n))
• Gera uma matriz m x n de unsones((m,n))
• Gera uma matriz identidade n x neye(n)
• Gera uma matriz identidade m x neye(m,n)
Conteúdo
Introdução
Como criar uma matriz?
Como acessar elementos da matriz?
Trabalhando com matrizes
17
Como acessar elementos da matriz?
 Indique o índice da 
linha e o índice da 
coluna, separados por 
vírgula e entre 
colchetes.
x = quadro[3,1]
quadro[3,1]
Índices das colunas
Ín
d
ic
es
 d
as
 li
n
h
as
0 1 2
0
1
2
3
4
5
6
18
Computando o total de uma linha
 Qual o total de medalhas de um país i?
[i,0] [i,1] [i,2]
0 2
linha i
1
19
Computando o total de uma linha
:: Script – definições
 Qual o total de medalhas da Rússia (linha 3)?
from numpy import *
# Criacao da matriz quadro 
quadro = array([
[46, 29, 29],
[38, 27, 23],
[29, 17, 19],
[24, 26, 32],
[13, 8, 7],
[11, 19, 14],
[11, 11, 12]
])
20
Ouro Prata Bronze
EUA 46 29 29
China 38 27 23
Grã-Bretanha 29 17 19
Rússia 24 26 32
Coreia do Sul 13 08 07
Alemanha 11 19 14
França 11 11 12
Computando o total de uma linha
:: Script
 Qual o total de medalhas da Rússia (linha 3)?
# Constantes (facilitam manutencao)
PAISES = quadro.shape[0]
MEDALHAS = quadro.shape[1]
total = 0
# Processa a j-esima coluna na linha 3
for j in range(MEDALHAS):
total = total + quadro[3,j]
print(total)
21
Computando o total de uma coluna
 Qual o total de medalhas do tipo j entre os sete 
países?
[0,j]
[1,j]
[2,j]
[3,j]
[4,j]
[5,j]
[6,j]
0
PAISES - 1
coluna j
22
Computando o total de uma coluna
:: Script – definições
 Qual o total de medalhas de ouro entre os sete 
primeiros colocados?
23
from numpy import *
# Criacao da matriz quadro 
quadro = array([
[46, 29, 29],
[38, 27, 23],
[29, 17, 19],
[24, 26, 32],
[13, 8, 7],
[11, 19, 14],
[11, 11, 12]
])
Ouro Prata Bronze
EUA 46 29 29
China 38 27 23
Grã-Bretanha 29 17 19
Rússia 24 26 32
Coreia do Sul 13 08 07
Alemanha 11 19 14
França 11 11 12
Computando o total de uma coluna
:: Script
 Qual o total de medalhas de ouro entre os sete 
primeiros colocados?
# Constantes (facilitam manutencao)
PAISES = quadro.shape[0]
MEDALHAS = quadro.shape[1]
ouro = 0
# Processa a i-esima linha na coluna 0
for i in range(PAISES):
ouro = ouro + quadro[i,0]
print(ouro)
24
Seleção de elementos de uma linha
 Seleção de todos os elementos da linha i:
 Seleção dos n primeiros elementos da linha i:
 Seleção dos n últimos elementos da linha i:
x = quadro[i,:]
x = quadro[i,:n]
x = quadro[i,-n:]
25
Seleção de elementos de uma coluna
 Seleção de todos os elementos da coluna j:
 Seleção dos n primeiros elementos da coluna j:
 Seleção dos n últimos elementos da coluna j:
x = quadro[:,j]
x = quadro[:n,j]
x = quadro[-n:,j]
26
Localizando elementos adjacentes
 Alguns programas que trabalham com matrizes 
precisam localizar os elementos adjacentes a outro 
elemento [i,j].
Cuidado para não obter 
índices negativos
[i-1,j-1] [i-1,j] [i-1,j+1]
[i,j-1] [i,j] [i,j+1]
[i+1,j-1] [i+1,j] [i+1,j+1]
27
Matrizes em Python
:: Exemplo 1
Determinar:
1. M[4, 1]
2. M[5, 3]
3. M[2, 3]
4. M[5, M[1, 3]]
5. M[M[4, 2], 2]
6. M[5, [M[2, 3] + M[4, 1]]]
7. M[3, :]
8. M[:, 3]
0 1 2 3
0 1 2 3 4
1 5 -5 4 0
2 1 1 1 1
3 -3 2 0 0
4 0 0 1 1
5 -1 -1 -2 -2
28
M
1. 0 2. -2
3. 1 4. -1
5. 4 6. -1
7. -3, 2, 0, 0
8. 4, 0, 1, 0, 1, -2 
Conteúdo
Introdução
Como criar uma matriz?
Como acessar elementos da matriz?
Trabalhando com matrizes
29
Problema 01
 Escreva um script que 
imprima uma matriz 
quadrada de dimensão N
contendo:
 1 nos elementos abaixo da 
diagonal principal
 0 na diagonal principal
 -1nos elementos acima da 
diagonal principal
30
Problema 01
:: Projetar algoritmo
[0,0] [0,1] [0,2] [0,3]
[1,0] [1,1] [1,2] [1,3]
[2,0] [2,1] [2,2] [2,3]
[3,0] [3,1] [3,2] [3,3]
Diagonal principal: i = j
Elementos acima: i < j
Elementos abaixo: i > j
coluna [j]
linha [i]
31
Problema 01
:: Script – Criação da matriz
from numpy import *
DIM = int(input("Dimensao da matriz:"))
# Cria matriz de zeros, no formato inteiro
mat = zeros((DIM,DIM), dtype=int)
32
Problema 01
:: Script – Preenchimento da matriz
# 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
33
Problema 02
 Criar uma matriz 
quadrada 4×4 na qual 
cada elemento é a 
soma dos índices de 
sua posição na matriz.
34
Problema 02
:: Script
from numpy import *
N = 4
mat = zeros((N,N), dtype=int)
for i in range(N):
for j in range(N):
mat[i,j] = i + j
35
Problema 03
 Oito estudantes responderam a um teste de dez 
perguntas. As respostas são armazenadas em uma 
matriz. Cada linha da figura abaixo registra 
respostas de um aluno para as questões.
36
Problema 03
 O gabarito é armazenado em um vetor de uma 
dimensão.
 Considerando que cada questão vale um ponto, 
qual a nota de cada aluno?
37
Problema 03
:: Projetar algoritmo
 Definir matriz de respostas (resp)
 Definir vetor de gabarito (gab)
 Definir um vetor de notas (notas), com número de 
elementos igual ao número de linhas da matriz res
 Para cada aluno (linha) na matriz resp:
 Para cada resposta (coluna) na matriz resp:
 Comparar resposta do aluno com gabarito
 Se forem iguais, incrementar posição correspondente no vetor 
notas
 Caso contrário, não faz nada
 Imprimir nota do aluno
38
Problema 03
:: Script – definições
from numpy import *
# Respostas dos alunos as questoes
resp = array ([
['A', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'],
['D', 'B', 'A', 'B', 'C', 'A', 'E', 'E', 'A', 'D'],
['E', 'D', 'D', 'A', 'C', 'B', 'E', 'E', 'A', 'D'],
['C', 'B', 'A', 'E', 'D', 'C', 'E', 'E', 'A', 'D'],
['A', 'B', 'D', 'C', 'C', 'D', 'E', 'E', 'A', 'D'],
['B', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'],
['B', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'],
['E', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D']])
# Gabarito das questoes
gab = array(
['D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'])
39
Problema 03
:: Script – cálculo da nota
# Constantes
NALUNOS = resp.shape[0] # No. de alunos
NQUEST = resp.shape[1] # No. de questoes
# Vetor das notas de cada aluno
notas = zeros((NALUNOS), dtype=int)
# Percorre cada linha (aluno)
for i in range(NALUNOS):
# Pontua um aluno i, verificando cada questao
for j in range(NQUEST):
if (resp[i,j] == gab[j]):
notas[i] = notas[i] + 1
print("Nota do aluno", i, ":", notas[i])
40
Referências bibliográficas
 Menezes, Nilo Ney Coutinho (2010). Introdução à 
Programação com Python. 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
41
Dúvidas?42

Continue navegando