English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
R 语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的矩阵运算支持。
矩阵里的元素可以是数字、符号或数学式。
一个 M x N 的矩阵是一个由 M(row) 行 和 N 列(column)元素排列成的矩形阵列。
以下是一个由 6 个数字元素构成的 2 행 3 列的矩阵:
R 语言的矩阵可以使用 matrix() 函数来创建,语法格式如下:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
参数说明:
data 向量,矩阵的数据
nrow 行数
ncol 列数
byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列
dimname 设置行和列的名称
创建一个数字矩阵:
# byrow 为 TRUE 元素按行排列 M <- matrix(c(3:14, 4, byrow = TRUE) print(M) # Ebyrow 为 FALSE 元素按列排列 N <- matrix(c(3:14, 4, byrow = FALSE) print(N) # 행과 열의 이름 정의 rownames = c("row1", "row2", "row3", "row4") colnames = c("col1", "col2", "col3") P <- matrix(c(3:14, 4, byrow = TRUE, dimnames = list(rownames, colnames)) print(P)
위 코드를 실행한 결과는 다음과 같습니다:
[1] [2] [3] [1,] 3 4 5 [2,] 6 7 8 [3,] 9 10 11 [4,] 12 13 14 [1] [2] [3] [1,] 3 7 11 [2,] 4 8 12 [3,] 5 9 13 [4,] 6 10 14 col1 col2 col3 row1 3 4 5 row2 6 7 8 row3 9 10 11 row4 12 13 14
R 语言矩阵提供了 t() 函数,可以实现矩阵的行列互换。
例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。
# 创建一个 2 행 3 열의 행렬 M = matrix( c(2, 0,6, 0,5, 0,1, 0,10, 0,4, 2,ncol = 3,byrow = TRUE) print(M) [1] [2] [3] [1,] 2 6 5 [2,] 1 10 4 # 转换为 3 행 2 열의 행렬 print(t(M))
위 코드를 실행한 결과는 다음과 같습니다:
[1] [2] [3] [1,] 2 6 5 [2,] 1 10 4 [1-----변환-----" [1] [2] [1,] 2 1 [2,] 6 10 [3,] 5 4
행렬 요소를 가져오려면, 요소의 열 인덱스와 행 인덱스를 사용하여, 좌표 형식으로 가져올 수 있습니다.
# 행과 열의 이름 정의 rownames = c("row1", "row2", "row3", "row4") colnames = c("col1", "col2", "col3") # 행렬 생성 P <- matrix(c(3:14, 4, byrow = TRUE, dimnames = list(rownames, colnames)) print(P) # 첫 번째 행 세 번째 열의 요소 가져오기 print(P[1, 0,3)) # 네 번째 행 두 번째 열의 요소 가져오기 print(P[4, 0,2)) # 두 번째 행 가져오기 print(P[2,]) # 세 번째 열 가져오기 print(P[3))
위 코드를 실행한 결과는 다음과 같습니다:
col1 col2 col3 row1 3 4 5 row2 6 7 8 row3 9 10 11 row4 12 13 14 [1] 5 [1] 13 col1 col2 col3 6 7 8 row1 row2 row3 row4 5 8 11 14
크기가 같은 (행 수와 열 수 모두 같은) 행렬 간에는 서로 더하고 뺄 수 있습니다. 구체적으로는 각 위치의 요소에 대해 덧셈과 뺄셈을 합니다. 행렬 곱셈은 더 복잡합니다. 두 행렬이 곱할 수 있는 경우는 첫 번째 행렬의 열 수가 두 번째 행렬의 행 수와 같을 때만 가능합니다.
# 생성 2 행 3 열의 행렬 matrix1 <- matrix(c(7, 0, 9, 0, -1, 0, 4, 0, 2, 0, 3, 2print(matrix ), nrow =1print(matrix matrix2 <- matrix(c(6, 0, 1, 9, 0, 3, 0, 2, 2print(matrix ), nrow =2print(matrix # 두 행렬을 더하기 result <- matrix1 + matrix2 cat("더하기 결과:","\n") print(result) # 두 행렬을 차감하기 result <- matrix1 - matrix2 cat("차감 결과:","\n") print(result)
위 코드를 실행한 결과는 다음과 같습니다:
[1] [2] [3] [1,] 7 -1 2 [2,] 9 4 3 [1] [2] [3] [1,] 6 0 3 [2,] 1 9 2 더하기 결과: [1] [2] [3] [1,] 13 -1 5 [2,] 10 13 5 차감 결과: [1] [2] [3] [1,] 1 -1 -1 [2,] 8 -5 1
# 생성 2 행 3 열의 행렬 matrix1 <- matrix(c(7, 0, 9, 0, -1, 0, 4, 0, 2, 0, 3, 2print(matrix ), nrow =1print(matrix matrix2 <- matrix(c(6, 0, 1, 9, 0, 3, 0, 2, 2print(matrix ), nrow =2print(matrix ) result <- matrix1 * matrix2 # 두 행렬을 곱하기 print(result) # 두 행렬을 나누기 result <- matrix1 / matrix2 cat("비교 결과:","\n") print(result)
위 코드를 실행한 결과는 다음과 같습니다:
[1] [2] [3] [1,] 7 -1 2 [2,] 9 4 3 [1] [2] [3] [1,] 6 0 3 [2,] 1 9 2 곱하기 결과: [1] [2] [3] [1,] 42 0 6 [2,] 9 36 6 비교 결과: [1] [2] [3] [1,] 1.166667 -Inf 0.6666667 [2,] 9.000000 0.4444444 1.5000000