열렬히.뛰기

행렬

Language > 프로그래밍 언어 > R > R언어 : 자료구조 > 행렬

행렬

행렬 만들기 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
>