English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

R 행렬

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