본문 바로가기
프로그래밍/R

[데이터구조] 행렬

by purplebulb 2018. 10. 31.
반응형



1. 개요

(1) 정의 : 동일한 형태로 구성된 2차원의 데이터 구조, 행의 차원과 열의 차원을 가지고 있음


(2) 특징 

① 하나의 행렬은 수치형, 문자형, 논리형 중 한 가지 형태의 원소만 갖음

② 행렬은 벡터의 확장, 행렬의 속성은 벡터의 속성을 포함함


(3) 속성

 속성

설명 

length 

자료의 개수 

mode 

자료의 형태 

dim 

행과 열의 개수 

dimnames 

행과 열의 이름 




2. 행렬의 생성


(1) matrix( ) 

- 함수를 이용하여 직접 생성

- 형태 : matrix(data, nrow=, ncol=, byrow=FALSE, dimnames = NULL)

           → byrow=FALSE : 기본값, 열기준으로 행렬 생성한다는 의미


(2) cbind( )

- 함수를 이용하여 벡터를 병합

- 형태 : cbind(벡터1, 벡터2, …)


(3) rbind( )

- 함수를 이용하여 벡터를 병합

- 형태 : rbind(벡터1, 벡터2, …)


(4) dim( )

- 함수를 이용하여 차원(행과 열의 개수)을 직접 지정

- 형태 : dim(x) <- c(행의 개수, 열의 개수)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#3행 3열 행렬 생성
matr = matrix(1:9, nrow = 3
dimnames(matr) = list(paste("row", c(1:3)), paste("col", c(1:3)))
 
#원소의 개수
length(matr) 
 
# 원소의 형태
mode(matr) 
 
#행과 열의 개수
dim(matr) 
 
#rbind - 열로 결합
r1 = c(1,4,7)
r2 = c(2,5,8)
r3 = c(3,6,9)
rbind(r1,r2,r3)
 
#cbind - 행으로 결합
c1 = 1:3
c2 = 4:6
c3 = 7:9
cbind(c1,c2,c3)
 
#dim - 3행 3열로 지정.
m1 = 1:9
dim(m1) = c(3,3
 




3. 행렬의 연산


(1) [  ] 

- 행렬의 일부 원소 추출

- 형태 : 행렬명[원소번호 또는 조건문, …]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#행렬의 연산
 
#행 기준 3열의 행렬
mat = matrix(c(1,2,3,4,5,6,7,8,9), ncol=3, byrow=T) 
 
#행렬 mat의 1행의 값
mat[1,] 
 
#행렬 mat의 3열의 값
mat[,3
 
# 3열에서 4보다 큰 행의 값 중 2열의 모든 값
mat[mat[,3]>4,2
 
# 2행 3열의 값 추출
mat[2,3



(2) apply( )

- 배열 또는 행렬에 함수를 적용하여 결과를 벡터, 배열 또는 리스트로 반환

- 행 또는 열 연산

- 형태 : apply(행렬, 조건 (1은 행, 2는 열, c(1,2)는 행과 열), FUN, …)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#apply() 함수
 
height = c(140,155,142,175)
size.1 = matrix(c(130,26,110,24,118,25,112,25), ncol=2, byrow=T,
                dimnames=list(c("Lee""Kim""Park"'Choi'), c("Weight""Waist")))
 
size = cbind(size.1, height)
 
# 2 : 열의 평균값 계산
colmean = apply(size, 2, mean) 
colmean
 
# 1 : 행의 평균값 계산
rowmean = apply(size, 1, mean) 
rowmean
 
# 2: 열의 분산값을 계산
colvar = apply(size, 2, var) 
colvar
 
# 1 : 행의 분산값을 계산
rowvar = apply(size, 1, var) 
rowvar
 



(3) sweep( )

- 행 또는 열 연산, 기본 연산이 뺄셈으로 지정되어 있음

- 형태 : sweep(행렬, 조건 (1은 행, 2는 열, c(1,2)는 행과 열), STATS, FUN="-", …)

           → 'STATS' : 연산에 활용되는 통계량이나 데이터 

1
2
3
4
5
6
7
8
9
10
11
12
13
#sweep() 함수 
 
#size 각 열의 값과 colmean의 차
sweep(size, 2, colmean) 
 
#size 각 행의 값과 rowmean의 차
sweep(size, 1, rowmean) 
 
# size 각 행의 값에 c(1,2,3,4)값을 더해줌
sweep(size, 1, c(1,2,3,4), "+"
 
# size 각 행의 값에 c(1,2,3,4)값을 빼줌
sweep(size, 1, c(1,2,3,4), "-"





4. 행렬의 연산


연산자 및 함수 

기능 

사용법 

t

전치행렬 구하는 함수 

t(A) 

%*% 

행렬의 곱셈 

A%*%B 

crossprod 

 t(A)%*%B

crossprod(A,B) 

outer 

외적 구하는 함수 

outer(A,B)

svd

singular value 분해 

svd(A) 

qr

QR 분해함수  

qr(A) 

solve

방정식의 근 구하는 함수 

solve(A,B) 

역행렬 구하는 함수 

solve(A) 

eigen

고유치와 고유벡터 함수 

eigen(A) 

chol 

Choleski 분해 함수 

chol(A) 




'프로그래밍 > R' 카테고리의 다른 글

[R 코드] 웹사이트 크롤링  (0) 2018.12.19
[데이터구조] 벡터  (0) 2018.10.29

댓글