Menu
Coddy logo textTech

행렬 연산

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 20번째.

행렬과 숫자 사이 또는 같은 크기의 두 행렬 사이의 산술 연산은 셀별로 수행됩니다:

a <- matrix(1:4, nrow = 2, byrow = TRUE)
b <- matrix(c(10, 20, 30, 40), nrow = 2, byrow = TRUE)
print(a * 2)
print(a + b)

출력:

     [,1] [,2]
[1,]    2    4
[2,]    6    8
     [,1] [,2]
[1,]   11   22
[2,]   33   44

비교는 셀 단위로도 작동하며 논리 행렬을 반환합니다. 이를 사용하여 셀의 개수를 세거나, 일치하는 셀만 변경하는 인덱스로 사용할 수 있습니다:

m <- matrix(c(4, 12, 7, 15), nrow = 2, byrow = TRUE)
print(sum(m > 10))
m[m > 10] <- 10
print(m)

출력:

[1] 2
     [,1] [,2]
[1,]    4   10
[2,]    7   10

t(m)은 행과 열을 바꿉니다. %*%는 행렬 곱이며, 각 결과 셀은 첫 번째 행렬의 한 행과 두 번째 행렬의 한 열을 결합하므로 ncol(a)는 nrow(b)와 같아야 합니다:

a <- matrix(1:4, nrow = 2, byrow = TRUE)
print(t(a))
print(a %*% a)

출력:

     [,1] [,2]
[1,]    1    3
[2,]    2    4
     [,1] [,2]
[1,]    7   10
[2,]   15   22

크기가 서로 다른 행렬 간의 셀별 산술 연산은 non-conformable arrays 오류와 함께 중단되므로, 먼저 dim()을 비교하세요. 행렬 곱에는 고유한 크기 규칙이 있습니다:

a <- matrix(1:4, nrow = 2)
b <- matrix(1:6, nrow = 2)
print(identical(dim(a), dim(b)))
print(dim(a %*% b))

출력:

[1] FALSE
[1] 2 3
challenge icon

챌린지

쉬움

cap_values(m, limit)를 완성하세요. 두 줄을 반환합니다. limit보다 큰 셀의 개수와 함께 Over: 를 출력하고, 그다음 모든 limit 초과 값이 limit로 대체된 후 행렬의 합과 함께 Total: 을 출력합니다.

제공된 코드는 한 줄에서 행렬을 읽습니다. 행은 ;로 구분되고 행의 값은 ,로 구분되므로, 1,2;3,4는 1 2와 3 4 행을 가진 행렬입니다. 다음 줄에는 limit이 들어 있습니다. 코드는 반환된 각 줄을 출력합니다.

직접 해보기

cap_values <- function(m, limit) {
  # 여기에 코드를 작성하세요
  c("Over: 0", "Total: 0")
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
  rows <- strsplit(line, ";")[[1]]
  matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cap_values(parse_matrix(input[1]), as.numeric(input[2])), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러