跳至主要内容

R 矩阵教程

全面了解 R 的矩阵:为行和列命名、访问元素,以及加法、减法、乘法和除法等运算。
· 7分钟 阅读

使用 AI 探索

矩阵是一种二维结构的对象,其中通常包含用于各种计算的数值元素。

例如,我们来看下面的矩阵。

      [,1] [,2] [,3]
[1,]    5    6    7
[2,]    8    9   10
[3,]   11   12   13

上面的矩阵表明它有 3 行和 3 列。

在 R 中可以使用 'matrix()' 创建矩阵。

下面的方式定义了 R 中矩阵的语法:

matrix(value, nrow, ncol, byrow, dimnames)

上述矩阵参数的含义如下:

  1. value —— 指定向量输入,每个条目表示矩阵中的一个元素。
  2. nrow —— 指定矩阵的行数。
  3. ncol —— 指定矩阵的列数。
  4. byrow —— 布尔值,取 TRUE 或 FALSE。若为 TRUE,则按行填充矩阵元素;若为 FALSE,则按列填充。
  5. dimnames —— 指定矩阵行和列的名称。

来看下面的示例,其中 'mat' 是矩阵的名称,c 中的向量输入包含值 8、4、5、6、7、9。还包含行数 'nrow' 为 2、列数 'ncol' 为 3,即矩阵维度为 2 × 3。同时矩阵元素按行排列,意味着向量输入按行依次填入。

mat = matrix(c(8,4,5,6,7,9),nrow = 2, ncol = 3,byrow = TRUE)
print(mat)

上述代码的输出如下,显示有三列两行,并且元素是按行填充的。

      [,1]  [,2] [,3]
[1,]    8    4    5
[2,]    6    7    9

为行和列命名

让我们创建一个矩阵,元素为 1 到 9,行数为 3。同时,用包含 r1 到 r3 以及 c1 到 c3 的向量为行和列命名。

mat <- matrix(1:9,  nrow = 3,dimnames = list(c("r1","r2","r3"), c("c1","c2","c3")))
mat
    c1    c2    c3
r1    1    4    7
r2    2    5    8
r3    3    6    9

上述输出显示元素 1 到 9 是按列填充的。同时,行和列通过 r1 到 r3、c1 到 c3 的标签进行了标注。

访问矩阵中的元素

下面名为 'mat' 的矩阵包含 3 行和 3 列。

    c1    c2    c3
r1    1    4    7
r2    2    5    8
r3    3    6    9

要单独访问矩阵中的元素,需要在矩阵名后使用中括号并在其中指定行和列。

  • 要访问上述矩阵中的元素 5,使用如下语法:
    mat[2,2]
  • 要访问上述矩阵中的元素 6,使用如下语法:
    mat[3,2]
  • 要访问矩阵的第一列,即 [1 2 3],使用如下语法:
    mat[,1]
  • 要访问矩阵的第二行,即 [2 5 8],使用如下语法:
    mat[2,]

矩阵中的计算

矩阵加法与减法

条件:进行矩阵加法和减法,两个矩阵必须具有相同的维度,也就是行数和列数相同。例如:

下面的矩阵 mat1 和 mat2 的维度都是 3 × 3,行列数相同。

mat1 <- matrix(c(5,10,15,20,25,30,35,40,45), nrow = 3)
print(mat1)

mat2 <- matrix(c(50,55,60,65,70,75,80,85,90), nrow = 3)
print(mat2)
     [,1] [,2] [,3]
[1,]    5   20   35
[2,]   10   25   40
[3,]   15   30   45
     [,1] [,2] [,3]
[1,]   50   65   80
[2,]   55   70   85
[3,]   60   75   90

上面的矩阵打印出了各个元素,且均为按列填充。

add_output <- mat1 + mat2
cat("Addition","\n")
print(add_output)


sub_output <- mat1 - mat2
cat("Subtraction","\n")
print(sub_output)
Addition
     [,1] [,2] [,3]
[1,]   55   85  115
[2,]   65   95  125
[3,]   75  105  135
Subtraction
     [,1] [,2] [,3]
[1,]  -45  -45  -45
[2,]  -45  -45  -45
[3,]  -45  -45  -45

上述加法和减法的输出表明两个矩阵对应位置的元素逐一相加或相减。例如,在矩阵加法中,mat1 中第 1 行第 1 列的元素 5 与 mat2 中第 1 行第 1 列的元素相加,得到 55。类似地,所有元素都按相同方式进行加减,得到上述结果。

矩阵乘法与除法

条件:进行矩阵乘法和除法时,行数和列数需要一致。换言之,维度需要相同。

矩阵乘法

下面的示例中,两个矩阵 mat1 和 mat2 的行数为 3、列数为 2,彼此相同。每个矩阵包含 6 个按列填充的元素,维度均为 3 × 2。

mat1<- matrix(c(2,4,6,8,10,12), nrow = 3,ncol =2)
print(mat1)

mat2 <- matrix(c(14,16,18,20,22,24), nrow = 3,ncol=2)
print(mat2)

final <- mat1 * mat2
print('------------------')
cat("Multiplication","\n")
print(final)
     [,1] [,2]
[1,]    2    8
[2,]    4   10
[3,]    6   12
     [,1] [,2]
[1,]   14   20
[2,]   16   22
[3,]   18   24
-----------------
Multiplication
     [,1] [,2]
[1,]   28  160
[2,]   64  220
[3,]  108  288

上述矩阵乘法(逐元素乘法)结果显示 mat1 与 mat2 的对应元素相互相乘。例如,'mat1[1][1]' 的 2 乘以 'mat2[1][1]' 的 14,得到 28。以此类推,直到 'mat1[3][2]' 的 12 与 'mat2[3][2]' 的 24 相乘,得到 288。

矩阵除法

下面的示例中,两个矩阵 mat1 和 mat2 的行数为 3、列数为 2,彼此相同。每个矩阵包含 6 个按列填充的元素,维度均为 3 × 2。

mat1<- matrix(c(2,4,6,8,10,12), nrow = 3,ncol =2)
print(mat1)

mat2 <- matrix(c(14,16,18,20,22,24), nrow = 3,ncol=2)
print(mat2)
final <- mat1 / mat2
print('--------------')
cat("Division","\n")
print(final)
   [,1] [,2]
[1,]    2    8
[2,]    4   10
[3,]    6   12
     [,1] [,2]
[1,]   14   20
[2,]   16   22
[3,]   18   24
--------------
Division
          [,1]      [,2]
[1,] 0.1428571 0.4000000
[2,] 0.2500000 0.4545455
[3,] 0.3333333 0.5000000

上述矩阵除法(逐元素除法)结果显示 mat1 与 mat2 的对应元素相互相除。例如,'mat1[1][1]' 的 2 除以 'mat2[1][1]' 的 14,得到 0.1428571。以此类推,直到 'mat1[3][2]' 的 12 与 'mat2[3][2]' 的 24 相除,得到 0.5000000。

恭喜您

恭喜您,已经学习完本教程!

在本教程中,您学习了 R 的矩阵、如何为行和列命名、如何访问元素,以及加法、减法、乘法和除法等运算。

如果您想进一步学习 R,请参加 DataCamp 的 Introduction to R 课程。

主题