龙空技术网

R语言实战-自学笔记-矩阵

zjh9280 106

前言:

眼前我们对“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 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与矩阵运算总结,

标签: #c语言对角矩阵