Operace s maticemi v programu R © TGU 2012 1 Operace matic v programu R R je open-source statistický programovací balíček, který obsahuje mnohé operátory vektorů a matic. Matice # maticová funkce # R zadává data vložená po sloupcích začínajících sloupcem jedna # 1. arg: c(2,3,-2,1,2,2) hodnoty prvků vyplňující sloupce # 2. arg: 3 počet řádků (rows) # 3. arg: 2 počet sloupců (columns) A <- matrix(c(2,3,-2,1,2,2),3,2) A [,1] [,2] [1,] 2 1 [2,] 3 2 [3,] -2 2 Je to matice? is.matrix(A) [1] TRUE is.vector(A) [1] FALSE Násobení skalárem c <- 3 c*A [,1] [,2] [1,] 6 3 [2,] 9 6 [3,] -6 6 Sčítání a odečítání matic B <- matrix(c(1,4,-2,1,2,1),3,2) B [,1] [,2] [1,] 1 1 [2,] 4 2 [3,] -2 1 C <- A + B C [,1] [,2] [1,] 3 2 [2,] 7 4 [3,] -4 3 Operace s maticemi v programu R © TGU 2012 2 D <- A - B D [,1] [,2] [1,] 1 0 [2,] -1 0 [3,] 0 1 Násobení matic %*% D <- matrix(c(2,-2,1,2,3,1),2,3) D [,1] [,2] [,3] [1,] 2 1 3 [2,] -2 2 1 C <- D %*% A C [,1] [,2] [1,] 1 10 [2,] 0 4 C <- A %*% D C [,1] [,2] [,3] [1,] 2 4 7 [2,] 2 7 11 [3,] -8 2 -4 D <- matrix(c(2,1,3),1,3) D [,1] [,2] [,3] [1,] 2 1 3 C <- D %*% A C [,1] [,2] [1,] 1 10 C <- A %*% D Chyba v A %*% D : nekonformní k násobení Transpozice matic AT <- t(A) AT [,1] [,2] [,3] [1,] 2 3 -2 [2,] 1 2 2 ATT <- t(AT) >ATT [,1] [,2] [1,] 2 1 [2,] 3 2 [3,] -2 2 Jedničkový vektor U <- matrix(1,3,1) U [,1] [1,] 1 [2,] 1 [3,] 1 Operace s maticemi v programu R © TGU 2012 3 Jedničková matice U <- matrix(1,3,2) U [,1] [,2] [1,] 1 1 [2,] 1 1 [3,] 1 1 Diagonální matice S <- matrix(c(2,3,-2,1,2,2,4,2,3),3,3) S [,1] [,2] [,3] [1,] 2 1 4 [2,] 3 2 2 [3,] -2 2 3 D <- diag(S) D [1] 2 2 3 D <- diag(diag(S)) D [,1] [,2] [,3] [1,] 2 0 0 [2,] 0 2 0 [3,] 0 0 3 Jednotková (identická) matice I <- diag(c(1,1,1)) I [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 Symetrická matice C <- matrix(c(2,1,5,1,3,4,5,4,-2),3,3) C [,1] [,2] [,3] [1,] 2 1 5 [2,] 1 3 4 [3,] 5 4 -2 CT <- t(C) CT [,1] [,2] [,3] [1,] 2 1 5 [2,] 1 3 4 [3,] 5 4 -2 Inverze matice A <- matrix(c(4,4,-2,2,6,2,2,8,4),3,3) A [,1] [,2] [,3] [1,] 4 2 2 [2,] 4 6 8 [3,] -2 2 4 Operace s maticemi v programu R © TGU 2012 4 AI <- solve(A) AI [,1] [,2] [,3] [1,] 1.0 -0.5 0.5 [2,] -4.0 2.5 -3.0 [3,] 2.5 -1.5 2.0 A %*% AI [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 AI %*% A [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 Inverze & determinant matice C <- matrix(c(2,1,6,1,3,4,6,4,-2),3,3) C [,1] [,2] [,3] [1,] 2 1 6 [2,] 1 3 4 [3,] 6 4 -2 CI <- solve(C) CI [,1] [,2] [,3] [1,] 0.2156863 -0.25490196 0.13725490 [2,] -0.2549020 0.39215686 0.01960784 [3,] 0.1372549 0.01960784 -0.04901961 d <- det(C) d [1] -102 Počet řádků & sloupců X <- matrix(c(3,2,4,3,2,-2,6,1),4,2) X [,1] [,2] [1,] 3 2 [2,] 2 -2 [3,] 4 6 [4,] 3 1 dim(X) [1] 4 2 r <- nrow(X) r [1] 4 c <- ncol(X) c [1] 2 Operace s maticemi v programu R © TGU 2012 5 Výběr řádku H[1, ] * výběr 1. řádku [1] 5 2 1 Výběr sloupce H[, 2] * výběr 2. sloupce [1] 1 1 2 2 6 Výpočet součtů sloupců a řádků # pozor na velké písmeno S A <- matrix(c(2,3,-2,1,2,2),3,2) A [,1] [,2] [1,] 2 1 [2,] 3 2 [3,] -2 2 c <- colSums(A) c [1] 3 5 r <- rowSums(A) r [1] 3 5 0 a <- sum(A) a [1] 8 Výpočet průměrů sloupců a řádků # pozor na velké písmeno M cm <- colMeans(A) cm [1] 1.000000 1.666667 rm <- rowMeans(A) rm [1] 1.5 2.5 0.0 m <- mean(A) m [1] 1.333333 Výběr submatice z matice A[, 1:3] * výběr 1. až 3. sloupce A[2:3, ] * výběr 2. až 3. řádku Operace s maticemi v programu R © TGU 2012 6 Horizontální spojování matic A [,1] [,2] [1,] 2 1 [2,] 3 2 [3,] -2 2 B <- matrix(c(1,3,2,1,4,2),3,2) B [,1] [,2] [1,] 1 1 [2,] 3 4 [3,] 2 2 C <- cbind(A,B) C [,1] [,2] [,3] [,4] [1,] 2 1 1 1 [2,] 3 2 3 4 [3,] -2 2 2 2 Vertikální spojování matic C <- rbind(A,B) C [,1] [,2] [1,] 2 1 [2,] 3 2 [3,] -2 2 [4,] 1 1 [5,] 3 4 [6,] 2 2 2. odmocnica sqrt(b) Řešení soustavy rovnic 3x1 + 4x2 = 4 x1 + 6x2 = 2 V maticovém zápisu: Ax = y, kde        61 43 A        2 1 x x x ,        2 4 y Pak x = A-1 y, nebo v R A <- matrix(c(3,1,4,6),nrow=2) y <- matrix(c(4,2),nrow=2) x<- solve(A)%*%y x Operace s maticemi v programu R © TGU 2012 7 Maticové příkazy V následujících příkladech jsou A a B matice a x a b jsou vektory. Operátor nebo Popis A * B Násobení prvku prvkem A %*% B Násobení matic A %o% B Outer product. AB' (Kronekerův součin; ) crossprod(A,B) crossprod(A) A'B a A'A t(A) Transpozice diag(x) Vytvoření diagonální matice s prvky x na hlavní diag(A) Vrátí vektor obsahující prvky hlavní diagonály. diag(k) Jestliže k je skalár, vytvoří k x k matici identity. solve(A, b) Vrátí vektor x z rovnice b = Ax (tj. A-1 b) solve(A) Inverze matice A (A je čtvercová matice) ginv(A) Moore-Penrose zobecněná inverze matice A. ginv(A) vyžaduje nahrání MASS balíčku. cbind(A,B,...) Kombinuje matice (vektory) horizontálně. rbind(A,B,...) Kombinuje matice (vectory) vertikálně. rowMeans(A) Vrátí vektor průměrů řádků. rowSums(A) Vrátí vektor součtů řádků. colMeans(A) Vrátí vektor průměrů sloupců. colSums(A) Vrátí vektor součtů sloupců. Doc. Ing. Tomáš Urban, Ph.D. UMFGZ MENDELU v Brně urban@mendelu.cz