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语言特征矩阵(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"

2.查看矩阵

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"

3.矩阵重命名行和列

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

4.矩阵运算

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

    分享
    投诉
    首页