Matrizes • As matrizes arranjam a informação em duas dimensões. – Em contraposição aos vectores que a arranjam numa só dimensão. • Em R as matrizes não são mais do que vectores com duas dimensões. – Podemos guardar um conjunto de valores numa matriz da seguinte forma: > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5) > m [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 Número de linhas [2,] 23 77 44 12 23 Número de colunas Luís Torgo, 2002 FEP, UP > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5) [,1] [,2] [,3] [,4] [,5] Os números foram [1,] 45 66 33 56 78 [2,] 23 77 44 12 23 por coluna. “espalhados” • Podemos espalhar os números por linha da seguinte forma: > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5,byrow=T) > m [,1] [,2] [,3] [,4] [,5] [1,] 45 23 66 77 33 [2,] 44 56 12 78 23 • Podemos aceder aos elementos de uma matriz da seguinte forma: > m[2,4] [1] 78 > m[1,1] [1] 45 • Podemos aceder a todos os elementos de uma dimensão da seguinte forma: > m[1,] [1] 45 23 66 77 33 > m[,3] [1] 66 12 Luís Torgo, 2002 1ª linha Note : o resultado é um vector. 3ª coluna FEP, UP • As regras da reciclagem também são usadas com matrizes > preços.lojas.2002 <matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4) > preços.lojas.2002 [,1] [,2] [,3] [,4] [1,] 10.4 32 32.3 343 [2,] 12.0 34 30.2 350 > (preços.lojas.2003 <- 1.04 * preços.lojas.2002) [,1] [,2] [,3] [,4] [1,] 10.816 33.28 33.592 356.72 [2,] 12.480 35.36 31.408 364.00 Luís Torgo, 2002 FEP, UP Dar nomes às dimensões • Por vezes é mais simples usarmos nomes nas dimensões. > > > > preços.lojas.2002 <- matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4) colnames(preços.lojas.2002) <- c('p1','p2','p3','p4') rownames(preços.lojas.2002) <- c('porto','lisboa') preços.lojas.2002 p1 p2 p3 p4 porto 10.4 32 32.3 343 lisboa 12.0 34 30.2 350 > preços.lojas.2002['porto','p3'] [1] 32.3 > preços.lojas.2002['lisboa',] p1 p2 p3 p4 12.0 34.0 30.2 350.0 > preços.lojas.2002[,'p2'] porto lisboa 32 34 > preços.lojas.2002[,2] Continuamos a poder usar os porto lisboa números 32 34 Luís Torgo, 2002 FEP, UP Álgebra Matricial • Para obtermos a multiplicação matricial de duas matrizes usamos: > m1 <- matrix(c(45,23,66,77,33,44),2,3) > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 > m2 <- matrix(c(5,3,466,54.5,3.2,-34),3,2) > m2 [,1] [,2] [1,] 5 54.5 [2,] 3 3.2 [3,] 466 -34.0 > m1 %*% m2 [,1] [,2] [1,] 15801 1541.7 [2,] 20850 3.9 Luís Torgo, 2002 FEP, UP • Transposta de uma matriz > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 > t(m1) [,1] [,2] [1,] 45 23 [2,] 66 77 [3,] 33 44 • Determinante e inversa de uma matriz quadrada > m <- matrix(c(34,-23,43,5),2,2) > det(m) [1] 1159 > solve(m) [,1] [,2] [1,] 0.004314064 -0.03710095 [2,] 0.019844694 0.02933563 Luís Torgo, 2002 FEP, UP Resolução de sistemas de equações lineares • A função solve() também pode ser usada para resolver este tipo de sistemas. • Exemplo: > > > > coefs <- matrix(c(-4,54.3,0.3,-4),2,2) colnames(coefs) <- c('x','y') rownames(coefs) <- c('eq1','eq2') coefs x y eq1 -4.0 0.3 eq2 54.3 -4.0 > ys <- c(12.3,45) > solve(coefs,ys) x y 216.2069 2923.7586 Luís Torgo, 2002 − 4 x + 0.3 y = 12.3 54.3 x − 4 y = 45 FEP, UP