自学内容网 自学内容网

R语言学习笔记4-数据结构-矩阵

矩阵(Matrix)介绍

矩阵是一种二维的数据结构,其中所有的元素必须是同一种数据类型(通常是数值型或字符型),特别适合存储和处理二维数据

特点和用途

  1. 二维数据结构:由行和列组成,所有元素必须是相同的数据类型
  2. 数学和统计运算:支持矩阵运算,如加法、乘法、转置等,适用于线性代数和统计分析
  3. 索引和切片:可以通过行列索引访问和修改矩阵元素,也可以对矩阵进行切片操作

创建矩阵

# 创建一个数值型矩阵
mat1 <- matrix(1:6, nrow = 2, ncol = 3)
print(mat1)
# 输出:
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6

# 创建一个字符型矩阵
mat2 <- matrix(c("a", "b", "c", "d"), nrow = 2, ncol = 2)
print(mat2)
# 输出:
#      [,1] [,2]
# [1,] "a"  "c"
# [2,] "b"  "d"

矩阵的索引和切片

# 访问矩阵元素
element <- mat1[1, 2]  # 第一行第二列的元素
print(element)  # 输出 3

# 修改矩阵元素
mat1[2, 3] <- 10
print(mat1)
# 输出:
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4   10

# 切片操作
row_slice <- mat1[1, ]  # 第一行的所有列
col_slice <- mat1[, 2]  # 第二列的所有行
print(row_slice)  # 输出 1 3 5
print(col_slice)  # 输出 3 4

矩阵的运算

# 矩阵加法
mat3 <- matrix(1:6, nrow = 2, ncol = 3)
mat_sum <- mat1 + mat3
print(mat_sum)
# 输出:
#      [,1] [,2] [,3]
# [1,]    2    6   10
# [2,]    4    8   16

# 矩阵乘法
mat_prod <- mat1 %*% t(mat3)  # mat1 乘以 mat3 的转置
print(mat_prod)
# 输出:
#      [,1] [,2]
# [1,]   38   44
# [2,]   64   80

矩阵的转置和属性

# 矩阵转置
mat_transpose <- t(mat1)
print(mat_transpose)
# 输出:
#      [,1] [,2]
# [1,]    1    2
# [2,]    3    4
# [3,]    5   10

# 获取矩阵的维度
dim_mat <- dim(mat1)
print(dim_mat)  # 输出 2 3,表示 2 行 3 列

矩阵的合并

可以使用 rbind() 和 cbind() 函数将多个矩阵按行或按列合并

# 按行合并两个矩阵
mat1 <- matrix(1:6, nrow = 2, ncol = 3)
mat2 <- matrix(7:12, nrow = 2, ncol = 3)
mat_combined_row <- rbind(mat1, mat2)
print(mat_combined_row)
# 输出:
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
# [3,]    7    9   11
# [4,]    8   10   12

# 按列合并两个矩阵
mat_combined_col <- cbind(mat1, mat2)
print(mat_combined_col)
# 输出:
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    3    5    7    9   11
# [2,]    2    4    6    8   10   12

矩阵的元素操作

可以对矩阵的每个元素进行相同的操作,例如应用函数或进行逻辑判断

# 应用函数到矩阵的每个元素
mat_squared <- mat1 ^ 2
print(mat_squared)
# 输出:
#      [,1] [,2] [,3]
# [1,]    1    9   25
# [2,]    4   16   36

# 逻辑判断
mat_logical <- mat1 > 3
print(mat_logical)
# 输出:
#       [,1]  [,2]  [,3]
# [1,] FALSE FALSE  TRUE
# [2,] FALSE  TRUE  TRUE

矩阵的行列操作

可以对矩阵的行列进行操作,例如对行列进行排序

# 对矩阵的行进行排序
mat_sorted_rows <- mat1[order(mat1[, 1]), ]
print(mat_sorted_rows)
# 输出:
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6

矩阵的特殊操作

可通过一些特殊的函数对矩阵进行操作,如计算行列的和、求逆矩阵等

# 计算行列的和
row_sums <- rowSums(mat1)
col_sums <- colSums(mat1)
print(row_sums)  # 输出 9 12
print(col_sums)  # 输出 3 7 11

# 求逆矩阵
mat_inverse <- solve(mat1)
print(mat_inverse)

矩阵的函数应用

可使用 apply() 函数对矩阵的行或列应用函数,进行更复杂的操作

# 应用函数到每行或每列
mat1 <- matrix(1:6, nrow = 2, ncol = 3)

# 计算每列的平均值
col_means <- apply(mat1, 2, mean)
print(col_means)  # 输出 1.5 3.5 5.5

# 计算每行的标准差
row_sds <- apply(mat1, 1, sd)
print(row_sds)  # 输出 2 2

矩阵的条件筛选

可使用条件语句和逻辑运算符对矩阵进行筛选,获取满足条件的子集

# 条件筛选
mat1 <- matrix(1:6, nrow = 2, ncol = 3)

# 获取大于 3 的元素
mat_above_3 <- mat1[mat1 > 3]
print(mat_above_3)  # 输出 4 5 6

矩阵的缺失值处理

可使用 is.na() 和条件语句来处理矩阵中的缺失值

# 缺失值处理
mat_missing <- matrix(c(1, NA, 3, 4, 5, NA), nrow = 2, ncol = 3)

# 获取非缺失值
mat_not_missing <- mat_missing[!is.na(mat_missing)]
print(mat_not_missing)  # 输出 1 3 4 5

设置矩阵的行列名

可使用 rownames() 和 colnames() 函数为矩阵设置行名和列名

# 创建一个矩阵
mat <- matrix(1:6, nrow = 2, ncol = 3)

# 设置行名和列名
rownames(mat) <- c("row1", "row2")
colnames(mat) <- c("col1", "col2", "col3")

print(mat)
# 输出:
#      col1 col2 col3
# row1    1    3    5
# row2    2    4    6

获取矩阵的行列名

同时可以使用 rownames() 和 colnames() 函数分别获取矩阵的行名和列名

# 获取矩阵的行列名
row_names <- rownames(mat)
col_names <- colnames(mat)

print(row_names)  # 输出 "row1" "row2"
print(col_names)  # 输出 "col1" "col2" "col3"

通过行列名访问矩阵元素

可使用行列名来访问矩阵的特定行和列,这样能够更方便地进行索引和操作

# 通过行列名访问矩阵元素
element <- mat["row1", "col2"]  # 获取第一行第二列的元素
print(element)  # 输出 3

原文地址:https://blog.csdn.net/weixin_42333247/article/details/140288665

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!