Operace s maticemi v programu R © TGU 2020 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 <- matrix(c(2,3,-2,1,2,2), nrow=3, ncol=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 2020 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 2020 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)) id = function(n) diag(c(1),nrow=n,ncol=n) I = id(3) I [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 id = function(n) diag(c(1),nrow=n,ncol=n) I3 = id(3) 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 Operace s maticemi v programu R © TGU 2020 4 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 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 Operace s maticemi v programu R © TGU 2020 5 dim(X) [1] 4 2 r <- nrow(X) r [1] 4 c <- ncol(X) c [1] 2 Stopa matice trA = sum(diag(A)) 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 Operace s maticemi v programu R © TGU 2020 6 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 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) Operace s maticemi v programu R © TGU 2020 7 Řešení soustavy rovnic 3x1 + 4x2 = 4 x1 + 6x2 = 2 V maticovém zápisu: Ax = y, kde Pak x = A-1 y, nebo v R        61 43 A        2 1 x x x ,        2 4 y A <- matrix(c(3,1,4,6),nrow=2) y <- matrix(c(4,2),nrow=2) x <- solve(A)%*%y x 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ů. Prof. Ing. Tomáš Urban, Ph.D. UMFGZ MENDELU v Brně urban@mendelu.cz Operace s maticemi v programu R © TGU 2020 8 y<- eigen(A) y$val jsou vlastní hodnoty (eigenvalues) A y$vec jsou vlastní vektory (eigenvectors) A y<-svd(A) Single value decomposition of A. y$d = vector containing the singular values of A y$u = matrix with columns contain the left singular vectors of A y$v = matrix with columns contain the right singular vectors of A R <- chol(A) Choleski factorization of A. Returns the upper triangular factor, such that R'R = A. y <- qr(A) QR decomposition of A. y$qr has an upper triangle that contains the decomposition and a lower triangle that contains information on the Q decomposition. y$rank is the rank of A. y$qraux a vector which contains additional information on Q. y$pivot contains information on the pivoting strategy used.