Baixe o app para aproveitar ainda mais
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
Compartilhar