R语言矩阵学习笔记
R语言中使用矩阵(matrix)
创建矩阵
可以使用 matrix()
函数来创建一个矩阵。
1 | # 创建一个3x3矩阵 |
输出:
1 | [,1] [,2] [,3] |
矩阵的维度和结构
nrow(mat)
和ncol(mat)
分别获取矩阵的行数和列数。dim(mat)
获取矩阵的维度。str(mat)
查看矩阵的结构。
例子如下:
1 | mat <- matrix(1:6, nrow = 3, ncol = 2) |
输出:
1 | [,1] [,2] |
查看这个矩阵的维度:
1 | dim(mat) |
输出:
1 | [1] 3 2 |
查看矩阵的结构:
1 | int [1:3, 1:2] 1 2 3 4 5 6 |
访问矩阵的元素
获取第二行第一列的元素:
1 | > mat <- matrix(1:6, nrow = 3, ncol = 2) |
输出:
1 | > mat[2, 1] |
注意这里的第一行不像是其他编程语言从0开始。
还可以选择某一行的所有元素(默认情况下,会将这些看作一个向量):
1 | > mat[3,] |
或者是选择某一列的所有元素:
1 | > mat[,1] |
或者是选择除了某一行的所有元素,例如下面就是选择除了第一行的所有元素,返回的是一个矩阵。
1 | > mat[-1,] |
上面的选择元素,都是将某一行或者某一列所有的元素,看成一个向量,而不是一个矩阵。通过 dim()
可以查看到维度不存在(NULL),这说明 x
是一个向量。
1 | > A <- matrix(1:6, nrow=3) |
保持矩阵结构
先来看一个例子:
1 | > A <- matrix(1:6, nrow=3) |
上面的 x2
不是一个矩阵。
如果我们希望保留矩阵的结构,则需要用 drop
:
1 | > x2 <- A[, 2, drop=FALSE] |
使用了 drop=FALSE
之后,x2
仍然是一个矩阵。
矩阵的运算
1 | mat1 <- matrix(1:4, nrow = 2) |
先打印出来矩阵
1 | > print(mat1) |
1 | # 矩阵相加 |
1 | # 矩阵乘法(内积) |
应用在矩阵上的函数
例子如下:
1 | mat <- matrix(1:6, nrow = 3, ncol = 2) |
输出:
1 | [,1] [,2] |
1 | # 计算每列的总和 |
1 | # 计算每行的平均值 |
此外还有一些常用的
diag()
diag()
函数在处理矩阵时有两个主要用途:
- 当它的参数是一个矩阵时,它会返回矩阵的对角线元素组成的向量。
- 当它的参数是一个数值或向量时,它会返回一个以该数值或向量为对角线的对角矩阵。
举一个参数为矩阵的例子:
1 | > B <- matrix(1:9, nrow=3) |
参数为数值:
1 | > diag(5) |
参数为向量的例子:
1 | > B <- c(1,2,3,4) |
det()
det()
函数计算给定矩阵的行列式。
行列式是一个可以从方阵(即行数和列数相同的矩阵)中得到的数值,它在线性代数中具有多种重要的应用,如判断矩阵是否可逆、求解线性方程组等。
1 | > B <- matrix(c(1,2,3,4), nrow=2) |
solve()
此函数可求解 x
的方程 a %*% x = b
,其中 b
可以是向量或矩阵。换言之,就是求逆矩阵。
1 | > B <- matrix(c(1,2,3,4), nrow=2) |
dim()
用于获取或设置指定矩阵、数组或 DataFrame 的维数。
1 | > B <- matrix(c(1,2,3,4), nrow=2) |
绑定矩阵
还是用上面的例子:
1 | mat1 <- matrix(1:6, nrow = 3) |
1 | # 将两个矩阵按行绑定 |
1 | # 将两个矩阵按列绑定 |
转置矩阵
例子如下:
1 | > mat <- matrix(1:6, nrow = 3, ncol = 2) |
使用 t()
函数来转置矩阵。
1 | > t(mat) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Vincent's Blog!