행렬
행렬 만들기 1
- 먼저 벡터를 만들고
matrix()함수에 집어넣으면 된다. matrix("data", nrow="행 갯수", ncol=”열 갯수”, byrow=T)byrow: 행부터 집어넣을지를 결정하는 인자.
숫자형 행렬
r
data1 = c(1,2,3,4,5,6,7,8,9)
A1 = matrix(data1, nrow=3, ncol=3); A1
data2 = seq(1, 9, 1)
A2 = matrix(data2, nrow=3, ncol=3, byrow=T); A2
r
# 결과
> data1 = c(1,2,3,4,5,6,7,8,9)
> A1 = matrix(data1, nrow=3, ncol=3); A1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
>
> data2 = seq(1, 9, 1)
> A2 = matrix(data2, nrow=3, ncol=3, byrow=T); A2
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
문자형 행렬
r
data3 = c("가", "나", "다", "라", "마", "바")
A3 = matrix(data3, byrow=T, nrow=2); A3
data4 = c("가", "나", "다", "라", "마", "바")
A4 = matrix(data4, byrow=T, ncol=3); A4
r
# 결과
> data3 = c("가", "나", "다", "라", "마", "바")
> A3 = matrix(data3, byrow=T, nrow=2); A3
[,1] [,2] [,3]
[1,] "가" "나" "다"
[2,] "라" "마" "바"
>
> data4 = c("가", "나", "다", "라", "마", "바")
> A4 = matrix(data4, byrow=T, ncol=3); A4
[,1] [,2] [,3]
[1,] "가" "나" "다"
[2,] "라" "마" "바"
행렬 만들기 2
- 벡터들을 합쳐서 만들 수도 있다.
rbind(): row(행)로 합칠 때 사용.cbind(): column(열)으로 합칠 때 사용.
rbind() 예시
r
r1 = 1:5
r2 = seq(2, 10, 2)
r3 = rep(3, 5)
new.r = rbind(r1, r2, r3)
new.r
r
> r1 = 1:5; r1
[1] 1 2 3 4 5
> r2 = seq(2, 10, 2); r2
[1] 2 4 6 8 10
> r3 = rep(3, 5); r3
[1] 3 3 3 3 3
> new.r = rbind(r1, r2, r3)
> new.r
[,1] [,2] [,3] [,4] [,5]
r1 1 2 3 4 5
r2 2 4 6 8 10
r3 3 3 3 3 3
cbind() 예시
r
c1 = c(1, 0, -1, -2, 3, 2)
c2 = seq(-4, 10, 6)
c3 = rep(1, 5)
new.c = cbind(c1, c2, c3)
new.c
r
> c1 = c(1, 0, -1, -2, 3, 2); c1
[1] 1 0 -1 -2 3 2
> c2 = seq(-4, 10, 6); c1
[1] 1 0 -1 -2 3 2
> c3 = rep(1, 6); c1
[1] 1 0 -1 -2 3 2
> new.c = cbind(c1, c2, c3)
> new.c
c1 c2 c3
[1,] 1 -4 1
[2,] 0 2 1
[3,] -1 8 1
[4,] -2 -4 1
[5,] 3 2 1
[6,] 2 8 1
행렬 다루기
행과 열, 차원 세기
nrow(): 행의 갯수ncol(): 열의 갯수dim(): 행, 열, 층의 수
r
A = matrix(seq(1, 9, 1), ncol=3, byrow=T)
nrow(A)
ncol(A)
dim(A)
r
> A = matrix(seq(1, 9, 1), ncol=3, byrow=T)
> nrow(A)
[1] 3
> ncol(A)
[1] 3
> dim(A)
[1] 3 3
행렬 인덱싱
- [a, b] : a행, b열의 원소
- [a, ] : a행 전체
- [, b] : b열 전체
예시
r
A = matrix(seq(1, 9, 1), nrow=3, byrow=T); A
A[1, 2]
A[1, ]
A[, 2]
r
> A = matrix(seq(1, 9, 1), nrow=3, byrow=T); A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
> A[1, 2]
[1] 2
> A[1, ]
[1] 1 2 3
> A[, 2]
[1] 2 5 8
행렬 계산
원소 단위 연산
- 원소끼리 합 :
+ - 원소끼리 곱 :
* - 원소끼리 나머지 :
%% - 원소끼리 제곱 :
^
예시
r
r
행렬 단위 연산
- 행렬곱 :
%*% - 역행렬 :
solve() - 대각행렬 :
diag() colSums(): 열의 합colMeans(): 열의 평균colnames(): 열에 이름 넣기- 전치행렬 :
t() - 행렬식 :
det() - 고유값, 고유벡터 :
eigen() rowSums(): 행의 합rowMeans(): 행의 평균rownames(): 행에 이름 넣기
다음과 같은 행렬을 통해서 예시를 알아보자.
A = matrix(c(1, 3, 9, 2, 1, 2, 0, 1, 3), nrow=3)
B = matrix(c(1, 9, 2, 8, 7, 3, 6, 5, 4), ncol=3)
행렬곱, 역행렬, 대각행렬, 전치행렬
r
A%*%B # 행렬곱
solve(A) # 역행렬
diag(A) # 대각행렬
t(A) # 전치행렬
r
> A%*%B
[,1] [,2] [,3]
[1,] 19 22 16
[2,] 14 34 27
[3,] 33 95 76
> solve(A)
[,1] [,2] [,3]
[1,] 1 -6 2
[2,] 0 3 -1
[3,] -3 16 -5
> diag(A)
[1] 1 1 3
> t(A)
[,1] [,2] [,3]
[1,] 1 3 9
[2,] 2 1 2
[3,] 0 1 3
행렬식, 고유값, 고유벡터
r
det(A)
eigen(B)
r
> det(A)
[1] 1
> eigen(B)
eigen() decomposition
$values
[1] 15.402327 -4.940023 1.537696
$vectors
[,1] [,2] [,3]
[1,] -0.5558713 -0.792804 -0.07667765
[2,] -0.7747283 0.608880 -0.60152679
[3,] -0.3013356 -0.026961 0.79516417
열의 합, 평균 & 열에 이름 넣기
r
rowSums(A)
rowMeans(A)
rownames(A) = c("lg", "sk", "At"); A
r
> rowSums(A)
[1] 3 5 14
> rowMeans(A)
[1] 1.000000 1.666667 4.666667
> rownames(A) = c("lg", "sk", "At")
> A
[,1] [,2] [,3]
lg 1 2 0
sk 3 1 1
At 9 2 3
열의 합, 평균 & 열에 이름 넣기
r
colSums(B)
colMeans(B)
colnames(B) = c("IVE", "Blackpink", "Newjeans")
r
> colSums(B)
[1] 12 18 15
> colMeans(B)
[1] 4 6 5
> colnames(B) = c("IVE", "Blackpink", "Newjeans")
> B
IVE Blackpink Newjeans
[1,] 1 8 6
[2,] 9 7 5
[3,] 2 3 4
>