#title Matrix [[TableOfContents]] ==== 행렬(Matrix)의 정의 ==== * 행렬은 2차원 데이터 구조 * 행차원, 열차원을 가짐 * 수학과는 달리 문자형이나 논리형 등을 원소로 가질 수 있음 * 행렬의 원소는 한가지 자료형만 허락됨 * 행렬의 정의하는 속성 * 형(mode) * 길이(length) * 차원(dim) * 차원명(dimnames) 1 2 3 4 5 6 -> 2행 3열의 차원을 갖는 수치형 행렬로 길이는 6 A D B E C F -> 3행 2열의 차원을 갖는 문자형 행렬로 길이는 6 ==== 행렬 생성 방법: cbind(), rbind() ==== {{{ > #벡터 > x <- c(1,2,3) > y <- c(4,5,6) > z <- c(7,8,9) > #방법1: cbind()함수로 열로 붙이기 > cbind(x,y,z) x y z [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > #방법2: rbind()함수로 행으로 붙이기 > rbind(x,y,z) [,1] [,2] [,3] x 1 2 3 y 4 5 6 z 7 8 9 }}} ==== 행렬 생성 방법: matrix() ==== {{{ > #방법3: matrix함수 사용하기 > c(x,y,z) [1] 1 2 3 4 5 6 7 8 9 > matrix(c(x,y,z), nrow = 3) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > matrix(c(x,y,z), ncol = 3) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > matrix(c(x,y,z), nrow = 3) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > matrix(c(x,y,z), nrow = 3, byrow = T) #행 우선채움 [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > matrix(c(x,y,z), byrow=T) #열 우선채움 [,1] [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 [7,] 7 [8,] 8 [9,] 9 > matrix(c(x,y,z), ncol = 3, byrow = T) #2번째 인수는 행, 열의 크기를 결정한다. 3번째 인수는 행 또는 열 우선을 지정한다. [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > > matrix(c(x,y,z), ncol = 2, byrow=T) [,1] [,2] [1,] 1 2 [2,] 3 4 [3,] 5 6 [4,] 7 8 [5,] 9 1 > matrix(c(x,y,z), ncol = 1, byrow = T) #열벡터 [,1] [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 [7,] 7 [8,] 8 [9,] 9 > matrix(c(x,y,z), nrow = 1, byrow = T) #행벡터 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 1 2 3 4 5 6 7 8 9 > }}} ==== 행렬 생성 방법: dim() ==== {{{ > dim(c(x,y,z)) <- c(2,2) 이하에 에러dim(c(x, y, z)) <- c(2, 2) : dims [product 4] do not match the length of object [9] > dim(c(x,y,z)) <- c(3,3) 이하에 에러dim(c(x, y, z)) <- c(3, 3) : 함수 "c<-"를 검색해낼수가 없었습니다 > data <- c(x,y,z) > dim(data) <- c(3,3) > data [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > }}} ==== 행렬 생성 방법: diag()를 이용함 대각행렬, 단위행렬 ==== {{{ > x <- c(1,3,5,0) > diag(x) #대각행렬 [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 3 0 0 [3,] 0 0 5 0 [4,] 0 0 0 0 > diag(1:5) [,1] [,2] [,3] [,4] [,5] [1,] 1 0 0 0 0 [2,] 0 2 0 0 0 [3,] 0 0 3 0 0 [4,] 0 0 0 4 0 [5,] 0 0 0 0 5 > diag(rep(1,3)) #단위행렬 [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > }}} ==== 행렬 생성 방법: upper.tri(), lower.tri()를 이용함 상삼각행렬, 하삼각행렬 ==== {{{ > m <- matrix(1:9, nrow = 3, byrow = T) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > upper.tri(m) [,1] [,2] [,3] [1,] FALSE TRUE TRUE [2,] FALSE FALSE TRUE [3,] FALSE FALSE FALSE > lower.tri(m) [,1] [,2] [,3] [1,] FALSE FALSE FALSE [2,] TRUE FALSE FALSE [3,] TRUE TRUE FALSE > upper.tri(m) * m [,1] [,2] [,3] [1,] 0 2 3 [2,] 0 0 6 [3,] 0 0 0 > lower.tri(m) * m [,1] [,2] [,3] [1,] 0 0 0 [2,] 4 0 0 [3,] 7 8 0 > upper.tri(m, diag = T) * m #상삼각행렬, 행렬의 곱이 아닌 같은 위치의 원소끼리의 곱이다. [,1] [,2] [,3] [1,] 1 2 3 [2,] 0 5 6 [3,] 0 0 9 > lower.tri(m, diag = T) * m #하삼각행렬 [,1] [,2] [,3] [1,] 1 0 0 [2,] 4 5 0 [3,] 7 8 9 > }}} ==== 행렬 생성 방법: t()를 이용한 전치행렬 ==== {{{ > #전치행렬: 행을 열로 하고 열을 행으로 하는 행렬 > a <- 1:9 > A <- matrix(a, ncol=3) > A [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > t(A) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > }}} ==== 행렬의 연산 ====