R

R 기초 5 - Matrix(2차원 배열)

코딩탕탕 2022. 10. 23. 16:22

행 = 가로

열 = 세로

 

# Matrix : 2차원 배열
a <- 1:8
dim(a) <- c(2, 4)  #  열부터 채운다.
a
typeof(a)   # integer
class(a)    # "matrix" "array"
mode(a)     # "numeric"

m <- matrix(1:5)
m
dim(m)

# m <- matrix(c(1:9), nrow=3)
m <- matrix(c(1:9), nrow=3, byrow = T) # 1 ~ 9까지 3열 호출
m
dim(m)

m <- matrix(1:10, 2) # 1 ~ 10까지 2행으로 호출
m
# m <- matrix(1:10, 3) 1 ~ 10까지 3행로 호출
m
class(m) # "matrix" "array"
m[1,]    # 1행 호출
m[1, 1]  # 1행 1열 호출
m[, 3]   # 3열 호출 err 없음
m[c(1,3),c(2:4)]
m[-1,]

a <- matrix(c(1:9), nrow=3, ncol=3) # 3행 3열
a
rownames(a) <- c('r1', 'r2', 'r3')      # 행 이름 바꿈
colnames(a) <- c('one', 'two', 'three') # 열 이름 바꿈
a
nrow(a)
NROW(a)   # 행의 갯수
dim(a)    # 행과 열 갯수
length(a) # 총 갯수
 
a <- matrix(c(1,2,3,4,5), 2, 2) # 1 ~ 5중에 2행 2열까지
b <- matrix(5:8, 2, 2)          # 5 ~ 8중에 2행 2열까지
a
b

a + 10
a + b

a * b   # 아다마드 곱

a %*% b #행렬 곱만 가능
# 행렬 곱 : 도형의 면적, 부피 계산, 머신러닝의 차원축소,
# 딥러닝에서 입력자료와 가중치 연산 등을 할 때 사용
# a %+% b  불가
a
diag(a) # 왼쪽 위부터 대각선 값 호출

diag(2)

a
t(a)       # 행렬전환 (transpose : 전치)
solve(a)   # 역행렬
solve(solve(a))
solve(a) %*% a

x1 <- c(5, 40, 50:52)
x2 <- c(30, 5, 6:8)
x1
x2
mr <- rbind(x1, x2)  # 값 갯수대로 열로 만들어준다.
mr
mc <- cbind(x1, x2)  # 값 갯수대로 행으로 만들어준다.
mc

dim함수는 행과 열의 갯수를 얘기한다.

행렬 곱은 행과 열이 같아야한다.

 

 

행렬 곱곱

a

      [,1] [,2]
[1,]    1    3
[2,]    2    4

b

			[,1] [,2]
[1,]    5    7
[2,]    6    8

a %*% b #행렬 곱곱

			[,1] [,2]
[1,]   23   31
[2,]   34   46

 

 

행렬 곱셈 링크 참조

 

행렬의 곱셈, 행렬의 거듭제곱

행렬의 곱셈은 행렬의 실수배에 비하면 훨씬 어려워요. 행렬을 곱할 수 있는 조건이 있어 이 조건을 만족하지 않으면 곱셈을 하지 못하는 경우도 있어요. 게다가 계산방식도 매우 까다롭죠. 도

mathbang.net