R语言矩阵 #
一、矩阵概述 #
矩阵(Matrix)是具有相同数据类型的二维数据结构,有行和列两个维度。
二、创建矩阵 #
2.1 使用matrix函数 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
print(m)
m <- matrix(1:6, nrow = 2)
print(m)
m <- matrix(1:6, ncol = 3)
print(m)
2.2 按行填充 #
r
m <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
print(m)
2.3 从向量创建 #
r
x <- 1:12
m <- matrix(x, nrow = 3, ncol = 4)
print(m)
2.4 使用rbind和cbind #
r
x <- c(1, 2, 3)
y <- c(4, 5, 6)
m1 <- rbind(x, y)
print(m1)
m2 <- cbind(x, y)
print(m2)
2.5 使用diag创建对角矩阵 #
r
d <- diag(c(1, 2, 3))
print(d)
d <- diag(3)
print(d)
三、矩阵属性 #
3.1 维度 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
dim(m)
nrow(m)
ncol(m)
length(m)
3.2 类型 #
r
m <- matrix(1:6, nrow = 2)
class(m)
typeof(m)
mode(m)
3.3 行名列名 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
rownames(m) <- c("行1", "行2")
colnames(m) <- c("列1", "列2", "列3")
print(m)
dimnames(m)
3.4 创建时指定名称 #
r
m <- matrix(1:6, nrow = 2, ncol = 3,
dimnames = list(c("行1", "行2"), c("列1", "列2", "列3")))
print(m)
四、矩阵索引 #
4.1 位置索引 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
print(m)
m[1, 2]
m[2, 3]
m[1, 1]
4.2 整行整列 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
m[1, ]
m[, 2]
m[2, , drop = FALSE]
4.3 多行多列 #
r
m <- matrix(1:12, nrow = 3, ncol = 4)
print(m)
m[1:2, 2:3]
m[c(1, 3), c(2, 4)]
4.4 名称索引 #
r
m <- matrix(1:6, nrow = 2, ncol = 3,
dimnames = list(c("A", "B"), c("X", "Y", "Z")))
m["A", "Y"]
m["A", ]
m[, "X"]
4.5 逻辑索引 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
m[m > 3]
m[m %% 2 == 0]
五、矩阵运算 #
5.1 算术运算 #
r
m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(5:8, nrow = 2)
m1 + m2
m1 - m2
m1 * m2
m1 / m2
5.2 与标量运算 #
r
m <- matrix(1:4, nrow = 2)
m + 10
m * 2
m / 2
m ^ 2
5.3 矩阵乘法 #
r
m1 <- matrix(1:6, nrow = 2, ncol = 3)
m2 <- matrix(1:6, nrow = 3, ncol = 2)
m1 %*% m2
5.4 转置 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
t(m)
5.5 行列式 #
r
m <- matrix(c(1, 2, 3, 4), nrow = 2)
det(m)
5.6 逆矩阵 #
r
m <- matrix(c(1, 2, 3, 4), nrow = 2)
solve(m)
m %*% solve(m)
六、矩阵函数 #
6.1 行列求和 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
rowSums(m)
colSums(m)
sum(m)
6.2 行列均值 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
rowMeans(m)
colMeans(m)
mean(m)
6.3 apply函数 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
apply(m, 1, sum)
apply(m, 2, sum)
apply(m, 1, mean)
apply(m, 2, max)
apply(m, 1, function(x) x[1] + x[2])
6.4 对角元素 #
r
m <- matrix(1:9, nrow = 3)
diag(m)
七、矩阵修改 #
7.1 修改元素 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
m[1, 1] <- 100
print(m)
m[1, ] <- c(10, 20, 30)
print(m)
7.2 添加行列 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
m <- rbind(m, c(7, 8, 9))
print(m)
m <- cbind(m, c(10, 11, 12))
print(m)
7.3 删除行列 #
r
m <- matrix(1:12, nrow = 3, ncol = 4)
m <- m[-1, ]
print(m)
m <- m[, -1]
print(m)
八、特殊矩阵 #
8.1 单位矩阵 #
r
diag(5)
8.2 零矩阵 #
r
matrix(0, nrow = 3, ncol = 3)
8.3 全1矩阵 #
r
matrix(1, nrow = 3, ncol = 3)
8.4 随机矩阵 #
r
matrix(runif(9), nrow = 3)
matrix(rnorm(9), nrow = 3)
九、矩阵分解 #
9.1 特征值分解 #
r
m <- matrix(c(1, 2, 3, 4), nrow = 2)
eigen(m)
eigen(m)$values
eigen(m)$vectors
9.2 奇异值分解 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
svd(m)
svd(m)$d
svd(m)$u
svd(m)$v
9.3 QR分解 #
r
m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3)
qr(m)
qr.R(qr(m))
qr.Q(qr(m))
9.4 Cholesky分解 #
r
m <- matrix(c(4, 2, 2, 3), nrow = 2)
chol(m)
t(chol(m)) %*% chol(m)
十、矩阵与向量转换 #
10.1 矩阵转向量 #
r
m <- matrix(1:6, nrow = 2, ncol = 3)
as.vector(m)
c(m)
10.2 向量转矩阵 #
r
x <- 1:12
matrix(x, nrow = 3)
matrix(x, ncol = 4)
十一、实践示例 #
11.1 线性方程组求解 #
r
A <- matrix(c(2, 1, 1, 3), nrow = 2)
b <- c(5, 10)
solve(A, b)
11.2 相关系数矩阵 #
r
data <- matrix(rnorm(20), nrow = 5)
cor(data)
cov(data)
11.3 距离矩阵 #
r
points <- matrix(c(0, 0, 1, 1, 2, 0), nrow = 3, byrow = TRUE)
dist(points)
as.matrix(dist(points))
11.4 图像矩阵操作 #
r
img <- matrix(runif(100), nrow = 10)
image(img)
t(img)
img[img > 0.5] <- 1
img[img <= 0.5] <- 0
十二、总结 #
本章学习了:
- 矩阵的创建方法
- 矩阵属性:维度、类型、名称
- 矩阵索引访问
- 矩阵运算:加减乘除、转置
- 矩阵函数:行列求和、均值
- apply函数的应用
- 矩阵分解方法
- 特殊矩阵的创建
矩阵是R语言进行数值计算和线性代数运算的核心数据结构!
最后更新:2026-03-27