R语言学习笔记4-数据结构-矩阵
R语言学习笔记4-数据结构-矩阵
矩阵(Matrix)介绍
矩阵是一种二维的数据结构,其中所有的元素必须是同一种数据类型(通常是数值型或字符型),特别适合存储和处理二维数据
特点和用途
- 二维数据结构:由行和列组成,所有元素必须是相同的数据类型
- 数学和统计运算:支持矩阵运算,如加法、乘法、转置等,适用于线性代数和统计分析
- 索引和切片:可以通过行列索引访问和修改矩阵元素,也可以对矩阵进行切片操作
创建矩阵
# 创建一个数值型矩阵
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)!