Operace s maticemi v programu R © TGU 2011 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 2011 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 2011 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 2011 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 2011 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 2011 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 2011 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 funkce 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í diagonále. 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