Skip to content

Latest commit

 

History

History
84 lines (82 loc) · 3.79 KB

Foundation_7.md

File metadata and controls

84 lines (82 loc) · 3.79 KB
title author date output
Foundation_7
Sheldon
November 29, 2015
html_document
keep_md
true

이번에는 R에서 행렬을 만드는 방법, 행렬의 기본 조작과 연산을 배워 봅시다. R에서 행렬을 만들 때는 우선 행렬에 들어갈 요소들을 벡터의 형태로 준비하고, matrix()를 사용해서 그 벡터를 행렬로 변환시켜 만들 수 있습니다. 그리고 matrix()안의 인수인 nrow, ncol을 통해서 행렬의 dimension을 결정할 수 있습니다. nrow는 행수를 지정하는 인수이고, ncol은 열수를 지정하는 인수입니다. ncol=3이라고 하면 그 행렬의 열수는 3이 됩니다. 그러면 예를 들어서 행렬을 만들어 봅시다.

matrix(c(1,4,5,8,3,4,6,8,12),ncol=3)

위에서 행렬을 만든 예를 보았듯이 행렬을 만들 때 그 요소는 왼쪽 위부터 아래로 순서대로 채워지고 왼쪽 열의 요소가 다 채워지면 그 다음 열의 위쪽에서부터 채워집니다. 만약에 열따라서 요소를 채우기보다 행따라서 요소를 채우고 싶으면 byrow=T를 인수로 지정해 주면 됩니다.

matrix(1:9, ncol=3)
matrix(1:9, ncol=3, byrow=T)

둘의 차이를 아시겠나요. 어떤 순서대로 채워지는지.. 다음에는 행렬 안의 요소를 추출하는 법을 소개하겠습니다. 행렬 안의 요소를 추출할 때는 행렬을 나타내는 변수명[행의 위치(번호), 열의 위치(번호)]를 통해서 추출하면 됩니다.

matrix(1:9, ncol=3)

위 행렬에서 6을 추출해 봅시다. 6은 3번째 행, 2번째 열에 있으므로 위치를 나타내면 [3, 2]가 됩니다.

x<-matrix(1:9, ncol=3)
x[3, 2]  

c( )를 이용해서 여러 요소를 추출할 수 있습니다. 한 번 2번째 행의 1번째 3번째 열의 요소를 추출해 봅시다.

x[2,c(1,3)]

그리고 [행번호, ]를 써서 행만 추출할 수도 있고 또는 [, 열번호]라고 써서 열만 추출할 수도 있습니다.

x
x[1,]
x[, 2]

벡터나 행렬을 결합해서 새로운 행렬을 만들 수 있습니다. 벡터 하나하나를 행 벡터로 생각해서 결합시킬 때는 rbind(), 열 벡터로 생각해서 결합시킬 때는 cbind()를 사용합니다.

rbind(c(1,1,1),c(0,0,0))
cbind(c(1,1,1),c(0,0,0))
x
rbind(x, c(1,1,1))
cbind(x,c(1,1,1))

다음에는 기본적인 행렬의 연산을 알아봅시다. 덧셈, 뺄셈이나 상수곱은 기본적인 연산과 그 방법이 같습니다.

A<-matrix(c(1,2,3,4),nrow=2)
B<-matrix(c(5,6,7,8),nrow=2)
A
3*A
B
A+B
A-B

다만 우리가 아는 행렬의 곱을 할 때는 % * %을 사용해야 합니다. * 를 사용하면 대응되는 행렬의 요소끼리 곱하게 됩니다.

A; B
A*B
A%*%B

t()를 이용하면 전치행렬을 구할 수 있습니다.

C<-matrix(c(0,0,0,1,1,1),nrow=3)
C
t(C)

단위행렬(identity matrix)는 diag()를 통해서 만들 수 있습니다. diag(3)은 3 by 3 단위행렬을 만듭니다.

diag(3)

어떤 행렬의 역행렬은 solve()로 구할 수 있습니다. 만약 역행렬을 구할 수 없는 경우라면 에러가 납니다.

y<-matrix(c(0,1,2,3,4,5,6,7,9),nrow=3)
solve(y)

그 다음에는 연립방정식을 푸는 방법입니다. 연립방정식을 Ax = b의 형태로 나타내었을 때,(이렇게 나타내는 방법은 나중에 linear algebra에서 배우게 됩니다.) 이 연립방정식을 푸는 방법은 solve(A, b)입니다. 이것도 만약에 연립방정식이 풀리지 않는 형태라면 에러가 생기겠죠.

A<-matrix(c(2,4,-2,1,-6,7,1,0,2),nrow=3)
b<-c(5,-2,9)
solve(A, b)

여기까지가 기본적으로 행렬을 만들고 다루며 계산하는 방법들입니다. 다음에 linear algebra에 대해 다룰 때 기회되면 더 소개할게요.