r语言特征矩阵(R语言实战-自学笔记-矩阵)
矩阵(matrix)是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)函数:matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充,下面我们就来聊聊关于r语言特征矩阵?接下来我们就一起去了解一下吧!
r语言特征矩阵
2.2.2 矩阵矩阵(matrix)是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。函数:matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。
1.创建矩阵
b <- matrix(1:9, 3, 3) # 构建矩阵b,数值1到9,3行,3列。
b # 显示矩阵b。
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
b1 <- matrix(c("one", "two", "three", "four", "five", "six", "seven", "eight", "nine"), 3, 3) # 构建字符型矩阵b1。
b1 # 显示矩阵b1。
## [,1] [,2] [,3]
## [1,] "one" "four" "seven"
## [2,] "two" "five" "eight"
## [3,] "three" "six" "nine"
b[!upper.tri(b, diag = TRUE)] <- 0 # 构建上三角矩阵。
b # 显示结果。
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 0 5 8
## [3,] 0 0 9
b1[!lower.tri(b1, diag = TRUE)] <- 0 # 构建下三角矩阵。
b1 # 显示结果。
## [,1] [,2] [,3]
## [1,] "one" "0" "0"
## [2,] "two" "five" "0"
## [3,] "three" "six" "nine"
dim(b) # 显示矩阵维度。
## [1] 3 3
nrow(b1) # 查看矩阵行维度。
## [1] 3
ncol(b1) # 查看矩阵列维度。
## [1] 3
diag(b1) # 返回矩阵的对角。
## [1] "one" "five" "nine"
b1[2,1] # 返回矩阵第2行,第1列的元素。
## [1] "two"
b1[2,3] = "eight" # 改变矩阵b1中第2行,第3列的元素为eight。
b1 # 显示结果。
## [,1] [,2] [,3]
## [1,] "one" "0" "0"
## [2,] "two" "five" "eight"
## [3,] "three" "six" "nine"
b1[upper.tri(b1)] = c("four", "seven", "eight") # 通过upper.tri()查询上三角并重新赋值。
b1 # 显示结果。
## [,1] [,2] [,3]
## [1,] "one" "four" "seven"
## [2,] "two" "five" "eight"
## [3,] "three" "six" "nine"
b1[lower.tri(b1)] = c("two", "two", "two") # 通过upper.tri()查询上三角并重新赋值。
b1 # 显示结果。
## [,1] [,2] [,3]
## [1,] "one" "four" "seven"
## [2,] "two" "five" "eight"
## [3,] "two" "two" "nine"
diag(b1) = c("one", "one", "one") # 通过diag()索引对角并重新赋值。
b1 # 显示结果。
## [,1] [,2] [,3]
## [1,] "one" "four" "seven"
## [2,] "two" "one" "eight"
## [3,] "two" "two" "one"
colnames(b) <- c("a", "b", "c") # 给矩阵b的列重命名为a,b,c。
rownames(b) <- c("a", "b", "c") # 给矩阵b的行重命名为a,b,c。
b # 显示结果。
## a b c
## a 1 4 7
## b 0 5 8
## c 0 0 9
b2 <- cbind(b, b1) # 合并矩阵b和b1。
b2 # 显示结果。
## a b c
## a "1" "4" "7" "one" "four" "seven"
## b "0" "5" "8" "two" "one" "eight"
## c "0" "0" "9" "two" "two" "one"
t(b2) # 矩阵转置。
## a b c
## a "1" "0" "0"
## b "4" "5" "0"
## c "7" "8" "9"
## "one" "two" "two"
## "four" "one" "two"
## "seven" "eight" "one"
b 2 # 矩阵内各元素加2。
## a b c
## a 3 6 9
## b 2 7 10
## c 2 2 11
b*2 # 矩阵内各元素乘以2。
## a b c
## a 2 8 14
## b 0 10 16
## c 0 0 18
b b # 矩阵相加
## a b c
## a 2 8 14
## b 0 10 16
## c 0 0 18
b-b # 矩阵相减。
## a b c
## a 0 0 0
## b 0 0 0
## c 0 0 0
b3 <- matrix(1:15, 3, 5) # 构建矩阵b3,1到15的数值,3行,5列。
b3 # 显示b3。
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 4 7 10 13
## [2,] 2 5 8 11 14
## [3,] 3 6 9 12 15
b4 <- matrix(1:18, 3, 6) # 构建矩阵b4,1到15的数值,3行,6列。
b4 # 显示b4。
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 4 7 10 13 16
## [2,] 2 5 8 11 14 17
## [3,] 3 6 9 12 15 18
t(b3) %*% b4 # 矩阵b3乘以b4。
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 14 32 50 68 86 104
## [2,] 32 77 122 167 212 257
## [3,] 50 122 194 266 338 410
## [4,] 68 167 266 365 464 563
## [5,] 86 212 338 464 590 716
crossprod(b3, b4) # 用函数crossprod()进行矩阵相乘。
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 14 32 50 68 86 104
## [2,] 32 77 122 167 212 257
## [3,] 50 122 194 266 338 410
## [4,] 68 167 266 365 464 563
## [5,] 86 212 338 464 590 716
rowSums(b) # 矩阵的行之和。
## a b c
## 12 13 9
rowMeans(b) # 矩阵行的平均值。
## a b c
## 4.000000 4.333333 3.000000
colSums(b) # 矩阵的列之和。
## a b c
## 1 9 24
colMeans(b) # 矩阵列平均值。
## a b c
## 0.3333333 3.0000000 8.0000000
矩阵相乘规则:若A矩阵的维度为m*n,相乘时,那么B矩阵的维度应为n*p,生成的结果矩阵的维度为m*p。这里b3的维度是3*5,b4的维度是3*6,为符合规则,将b3进行转置,维度变为5*3,生成新的矩阵的维度为5*6。
参考资料:
10. R与矩阵运算总结,https://blog.csdn.net/hnu_lb/article/details/38419405?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=5a4eefc0-d6f0-4fc4-85ec-5464a1fdbbaf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com