DBILITY

R data type array (행렬) 본문

statistics/R

R data type array (행렬)

DBILITY 2018. 11. 21. 20:43
반응형

행렬은 matrix 함수를 통해 생성한다. 사용법은 matrix( data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL ) 형태로,

data에는 벡터, nrow는 행의 수, ncol는 열의 수, byrow 는 행우선채우기, dimnames는 list타입으로 행과 열에 사용할 이름을 입력(rownames,colnames로도 가능)한다.

행렬원소 접근은 인덱스 또는 dimnames에서 입력한 행,열이름의 조합으로 가능하다.

> matrix(c(1:6), nrow = 2, ncol = 3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> matrix(c(1:6),2,3,byrow = TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> matrix(c(1:6),2,3,byrow = TRUE,dimnames = list(c('row1','row2'),c('col1','col2','col3')))
     col1 col2 col3
row1    1    2    3
row2    4    5    6
> 

> x<-matrix(c(1:6),2,3,byrow = TRUE,dimnames = list(c('row1','row2'),c('col1','col2','col3')))
> x
     col1 col2 col3
row1    1    2    3
row2    4    5    6
> x[1,1]
[1] 1
> x['row1','col1']
[1] 1

> rownames(x)
[1] "row1" "row2"
> colnames(x)
[1] "col1" "col2" "col3"

> length(x)
[1] 6
> nrow(x)
[1] 2
> NROW(x)
[1] 2

> rownames(x)<-rownames(c(1,2), do.NULL = FALSE, prefix = "R")
> x
   col1 col2 col3
R1    1    2    3
R2    4    5    6
> colnames(x)<-rownames(c(1,2,3), do.NULL = FALSE, prefix = "C")
> x
   C1 C2 C3
R1  1  2  3
R2  4  5  6
> y<-matrix(c(1:6),nrow = 2,ncol = 3)
> y
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> rownames(y)
NULL
> rownames(y)<-c("r1","r2")
> y
   [,1] [,2] [,3]
r1    1    3    5
r2    2    4    6
> colnames(y)
NULL
> colnames(y)<-c("c1","c2","c3")
> y
   c1 c2 c3
r1  1  3  5
r2  2  4  6
> colnames(y)
[1] "c1" "c2" "c3"
> rownames(y)
[1] "r1" "r2"

> y
   c1 c2 c3
r1  1  3  5
r2  2  4  6
> y[1,1]
[1] 1
> y[1,2]
[1] 3
> y[1:2,]
   c1 c2 c3
r1  1  3  5
r2  2  4  6
> y[,2:3]
   c2 c3
r1  3  5
r2  4  6
> y[,-3]
   c1 c2
r1  1  3
r2  2  4
> y[-2,-3]
c1 c2 
 1  3 

> y[,c(1,3)]
   c1 c3
r1  1  5
r2  2  6
> y['r1',]
c1 c2 c3 
 1  3  5

 

행렬의 4칙연산은 기본적으로 원소간 연산이 이루어 진다.

> x<-matrix(seq(1,6), nrow = 2)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x*2
     [,1] [,2] [,3]
[1,]    2    6   10
[2,]    4    8   12
> x+3
     [,1] [,2] [,3]
[1,]    4    6    8
[2,]    5    7    9
> x+x
     [,1] [,2] [,3]
[1,]    2    6   10
[2,]    4    8   12
> x/2
     [,1] [,2] [,3]
[1,]  0.5  1.5  2.5
[2,]  1.0  2.0  3.0
> x*x
     [,1] [,2] [,3]
[1,]    1    9   25
[2,]    4   16   36

 

요소의 곱셈이 아닌 행렬의 곱셉을 하기 위해서는 앞행렬의 열의 수와 뒤 행렬의 행의 수가 동일해야 한다.

같은 행렬의 곱셈이 필요할때 t()함수를 사용하여 pivot을 행한 후 곱셈할 수 있다.

 

※ t()함수(transpose)는 전치행렬(pivot ->행을 열로), solve()함수는 역행렬이다.

 갑자기 빨간책 수학의 정석이 떠오르고, 선형대수를 배운적이 있었나 생각이 든다. 안 배운거 같은데...

> x%*%t(x)
     [,1] [,2]
[1,]   35   44
[2,]   44   56

2*2행렬의 역행렬 공식은 다음과 같다.

 

> x<-matrix(1:4,ncol = 2)
> x
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> solve(x)
     [,1] [,2]
[1,]   -2  1.5
[2,]    1 -0.5

dim()함수는 인자로 주어진 행렬의 차원을 나타낸다.

c()함수로 차원을 입력시 차원이 변경된다.

> x<-matrix(1:6,ncol = 2)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> dim(x)<-c(2,3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> dim(x)
[1] 2 3

 

반응형
Comments