0Pricing
R Academy · 강의

행렬 산술과 연산

요소별 곱셈과 행렬 곱셈, 덧셈, 뺄셈을 수행합니다.

행렬 산술과 연산은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

요소별 연산과 matrix 연산

R은 요소별 연산(+, -, *, / 사용)과 실제 matrix 연산(%*% 사용)을 구분합니다. 이 차이를 이해하는 것은 선형 대수 연산을 올바르게 수행하는 데 매우 중요합니다.

A <- matrix(c(1,2,3,4), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)
cat('A:
'); print(A)
cat('B:
'); print(B)

# Element-wise multiply
cat('A * B (element-wise):
'); print(A * B)
# Matrix multiply
cat('A %*% B (matrix mult):
'); print(A %*% B)

요소별 덧셈과 뺄셈

차원이 같은 두 matrix 사이에 +와 -를 사용하면 대응하는 요소끼리 더하거나 뺍니다. 이는 순수한 요소별 연산입니다.

# Monthly revenue vs target (in thousands)
revenue <- matrix(c(120,135,110,98, 145,160,132,115),
                  nrow = 2, byrow = TRUE)
target  <- matrix(c(130,130,130,130, 150,150,150,150),
                  nrow = 2, byrow = TRUE)

deviation <- revenue - target
cat('Revenue vs Target deviation:
')
print(deviation)
cat('Above target?:
')
print(revenue >= target)

요소별 나눗셈과 곱셈

마찬가지로 크기가 같은 matrix 사이에서 *와 /를 사용하면 요소별로 연산합니다. matrix를 요소별로 크기 조정, 정규화 또는 결합할 때 유용합니다.

# Scale a matrix by another (element-wise)
prices <- matrix(c(10, 20, 15, 25), nrow = 2)
quantities <- matrix(c(5, 3, 8, 2), nrow = 2)

total_cost <- prices * quantities
cat('Total cost per item:
')
print(total_cost)

# Normalise to row maximum
max_prices <- matrix(rep(apply(prices, 1, max), 2), nrow = 2)
norm_prices <- prices / max_prices
cat('Normalised prices:
')
print(norm_prices)

matrix에 스칼라 연산 적용하기

일반 산술 연산자를 사용해 matrix의 모든 요소에 스칼라(단일 숫자) 연산을 적용할 수 있습니다. 스칼라는 matrix의 차원에 맞도록 재활용됩니다.

m <- matrix(c(10, 20, 30, 40, 50, 60), nrow = 2, ncol = 3)
cat('Original:
'); print(m)

cat('m + 5:
');  print(m + 5)
cat('m * 2:
');  print(m * 2)
cat('m / 10:
'); print(m / 10)
cat('m ^ 2:
');  print(m ^ 2)

실제 matrix 곱셈 %*%

A %*% B는 선형 대수의 matrix 곱셈을 수행합니다. 연산이 가능하려면 A의 열 개수와 B의 행 개수가 같아야 합니다. 결과의 차원은 (A의 행 수) x (B의 열 수)입니다.

# 2x3 times 3x2 = 2x2
A <- matrix(c(1,2,3, 4,5,6), nrow = 2, byrow = TRUE)
B <- matrix(c(7,8, 9,10, 11,12), nrow = 3, byrow = TRUE)
cat('A (2x3):
'); print(A)
cat('B (3x2):
'); print(B)
cat('A %*% B (2x2):
'); print(A %*% B)

rowSums()와 colSums()

rowSums(m)은 각 행의 합을 계산하고, colSums(m)은 각 열의 합을 계산합니다. matrix에 차원 이름이 있으면 두 함수 모두 이름이 지정된 vector를 반환합니다.

sales <- matrix(
  c(120,135,110,98,  145,160,132,115,  88,95,102,78),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Q1','Q2','Q3'), c('Jan','Feb','Mar','Apr'))
)
cat('Sales matrix:
'); print(sales)
cat('Quarterly totals:', rowSums(sales), '
')
cat('Monthly totals: ', colSums(sales), '
')

rowMeans()와 colMeans()

rowMeans(m)와 colMeans(m)은 각각 각 행과 열의 평균을 반환합니다. 이처럼 자주 수행하는 작업에서는 apply()로 mean()을 적용하는 것보다 빠릅니다.

exam_scores <- matrix(
  c(88,92,75,81, 79,85,90,73, 95,78,82,88),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Alice','Bob','Carol'), c('Math','Sci','Eng','Hist'))
)
cat('Student averages:
')
print(rowMeans(exam_scores))
cat('Subject averages:
')
print(colMeans(exam_scores))

matrix 비교 연산

matrix에 비교 연산자(==, >, <= 등)를 적용하면 같은 차원의 논리 matrix가 반환됩니다. 그런 다음 이 논리값을 마스크로 사용해 부분집합을 추출하거나 개수를 셀 수 있습니다.

scores <- matrix(c(88,45,92,61,73,55,84,79), nrow = 2)
cat('Scores:
'); print(scores)

# Which elements pass?
passing_mask <- scores >= 60
cat('Passing mask:
'); print(passing_mask)
cat('Number passing:', sum(passing_mask), '
')
cat('Passing scores:', scores[passing_mask], '
')

사용자 지정 행/열 연산에 apply() 사용하기

apply(m, MARGIN, FUN)은 행(MARGIN=1) 또는 열(MARGIN=2)에 함수를 적용합니다. rowSums/colMeans를 넘어선 사용자 지정 집계가 필요할 때 사용합니다.

m <- matrix(c(3,1,4,1,5,9,2,6,5,3,5,8), nrow = 3)
cat('Matrix:
'); print(m)

# Max of each row
cat('Row max:  ', apply(m, 1, max), '
')
# Range of each column
cat('Col range:
')
print(apply(m, 2, range))
# Custom: count values > 4 per row
cat('Values > 4 per row:', apply(m, 1, function(x) sum(x > 4)), '
')

행 전체에 vector 브로드캐스팅하기

matrix에 vector를 더하거나 곱하면 R은 matrix의 길이에 맞도록 vector를 순환하며 재활용합니다. 재활용은 열 단위로 진행되므로 행 단위 연산을 원할 때 예상치 못한 결과가 나올 수 있습니다.

m <- matrix(c(10,20,30, 40,50,60), nrow = 2)
cat('Matrix:
'); print(m)

# Add a 3-element vector: R recycles column-by-column
v <- c(1, 2, 3)
cat('m + c(1,2,3):
'); print(m + v)

# For row-wise scaling, use sweep()
row_weights <- c(0.5, 2.0)  # scale row 1 by 0.5, row 2 by 2
cat('Row-wise scaled:
'); print(sweep(m, 1, row_weights, '*'))

산술 연산 요약

R에서 사용하는 주요 matrix 연산 함수는 다음과 같습니다.

  • +, -, *, / — 요소별 산술 연산
  • %*% — matrix 곱셈(선형 대수)
  • rowSums(), colSums() — 행/열의 합계
  • rowMeans(), colMeans() — 행/열의 평균
  • apply(m, 1, fn) / apply(m, 2, fn) — 사용자 지정 행/열 집계
  • sweep() — vector를 사용한 행/열 단위 연산
m <- matrix(c(4,9,16,25), nrow = 2)
cat('Original:
'); print(m)
cat('sqrt (element-wise):
'); print(sqrt(m))
cat('rowSums:', rowSums(m), '
')
cat('colMeans:', colMeans(m), '
')

빠른 확인

R에서 A와 B가 2x2 matrix일 때 A * B는 무엇을 계산하나요?

복습: matrix 산술 연산

잘하셨습니다! 이 레슨의 핵심 내용은 다음과 같습니다.

  • matrix에서 +, -, *, /는 요소별로 연산합니다.
  • %*%는 실제 matrix 곱셈을 수행합니다(행 × 열).
  • rowSums(), colSums(), rowMeans(), colMeans()는 행이나 열을 기준으로 집계합니다.
  • 비교 연산자는 같은 형태의 논리 matrix를 반환합니다.
  • apply(m, 1, fn)은 행 단위로 함수를 적용하고, apply(m, 2, fn)은 열 단위로 적용합니다.
  • vector를 사용한 행/열 크기 조정에는 sweep()을 사용합니다.
# Final: compute grade curve (add 5 to all scores, cap at 100)
raw <- matrix(c(88,55,92,73,60,45,78,95), nrow = 2)
curved <- pmin(raw + 5, 100)  # pmin applies min element-wise
cat('Raw:
');    print(raw)
cat('Curved:
'); print(curved)

자주 묻는 질문

“행렬 산술과 연산” 강의는 무료인가요?

네 — “행렬 산술과 연산” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“행렬 산술과 연산”에서 뭘 배우나요?

요소별 곱셈과 행렬 곱셈, 덧셈, 뺄셈을 수행합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“행렬 산술과 연산” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. matrix()로 행렬 만들기
  2. 행렬 인덱싱과 부분 집합
  3. 행렬 산술과 연산
  4. 행렬 전치와 형태 변경
← R Academy(으)로 돌아가기