前言:
现时小伙伴们对“c语言的矩阵如何定义”大体比较重视,姐妹们都需要知道一些“c语言的矩阵如何定义”的相关知识。那么小编同时在网摘上网罗了一些关于“c语言的矩阵如何定义””的相关知识,希望咱们能喜欢,咱们一起来学习一下吧!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 94.矩阵运算
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与矩阵运算总结,
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言的矩阵如何定义