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