R语言基础教程——第3章:数据结构——矩阵

2019-08-07 10:25:20 浏览数 (1)

矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。一般使用格式为:

代码语言:javascript复制
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,       dimnames = NULL)

其中data包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。

1

创建矩阵

#创建1:16的矩阵,行为4行,先按行排列

代码语言:javascript复制
mat = matrix(1:16,nrow = 4,ncol = 4,byrow = TRUE)

2

查看矩阵维数并更改列名

代码语言:javascript复制
> dim(mat)#查看维度[1] 4 4> length(mat)# 查看元素总个数[1] 16> colnames(mat) = c('a','b','c','d') #更改列名> rownames(mat) = c('e','f','g','h') #更改行名
代码语言:javascript复制
> dim.name = dimnames(mat)> dim.name[[1]][1] "e" "f" "g" "h"[[2]][1] "a" "b" "c" "d"> dim.name[[1]][1] "e" "f" "g" "h"

3

矩阵的取值

代码语言:javascript复制
> mat[1,3] #取第一行,第三列元素[1] 3> mat[2,] #取第二行,所有列a b c d 5 6 7 8 > mat[,3:4]#取第三列到第四列,所有行   c  de  3  4f  7  8g 11 12h 15 16> mat[c(1,3),c(2,4)] #当取不相邻矩阵的行和列可以用c()创建向量   b  de  2  4g 10 12> mat[-1,-2] #除去第一行 和第二列不取,其他全取   a  c  df  5  7  8g  9 11 12h 13 15 16> mat['f','a'] #也可以使用行名和列名来取[1] 5

4

矩阵的运算-元素间运算

对矩阵的每个元素进行加减乘除,且顺序是按照列来算的。

代码语言:javascript复制
> mat #原始矩阵   a  b  c  de  1  2  3  4f  5  6  7  8g  9 10 11 12h 13 14 15 16> mat*3 #每个元素乘以3   a  b  c  de  3  6  9 12f 15 18 21 24g 27 30 33 36h 39 42 45 48> mat*c(1:4) #每一列均乘以1,2,3,4   a  b  c  de  1  2  3  4f 10 12 14 16g 27 30 33 36h 52 56 60 64> mat #对矩阵运算不会改变原矩阵   a  b  c  de  1  2  3  4f  5  6  7  8g  9 10 11 12h 13 14 15 16> mat1 = mat*c(1:4) #如果需要保留矩阵运算之后的矩阵,需要额外命名> mat1   a  b  c  de  1  2  3  4f 10 12 14 16g 27 30 33 36h 52 56 60 64> mat*c(1:16) #按列进行对应元素相乘   a   b   c   de  1  10  27  52f 10  36  70 112g 27  70 121 180h 52 112 180 256> mat   5   a  b  c  de  6  7  8  9f 10 11 12 13g 14 15 16 17h 18 19 20 21> mat/3          a         b        c        de 0.3333333 0.6666667 1.000000 1.333333f 1.6666667 2.0000000 2.333333 2.666667g 3.0000000 3.3333333 3.666667 4.000000h 4.3333333 4.6666667 5.000000 5.333333> mat/c(1:3) #如果维度不对应,会有警告     a  b   c  de  1.0  1 1.0  4f  2.5  2 7.0  4g  3.0 10 5.5  4h 13.0  7 5.0 16Warning message:In mat/c(1:3) :  longer object length is not a multiple of shorter object length

5

矩阵运算-矩阵间运算

代码语言:javascript复制
> t(mat) #求矩阵转置  e f  g  ha 1 5  9 13b 2 6 10 14c 3 7 11 15d 4 8 12 16> mat%*%mat #矩阵与矩阵相乘    a   b   c   de  90 100 110 120f 202 228 254 280g 314 356 398 440h 426 484 542 600> mat%*%c(1:4)  [,1]e   30f   70g  110h  150> det(mat) #求矩阵的行列式[1] 4.733165e-30> diag(mat) #求矩阵的对角线元素[1]  1  6 11 16> mat2 = matrix(rnorm(16),nrow = 4) #rnorm表示在R中生成标准正态分布(normolisation)的随机数> mat3 = solve(mat2) #求逆> mat2%*%mat3 
代码语言:javascript复制
> rowMeans(mat) #对行求均值   e    f    g    h  2.5  6.5 10.5 14.5 > colMeans(mat)#对列求均值 a  b  c  d  7  8  9 10 > rowSums(mat) #对行求和 e  f  g  h 10 26 42 58 > colSums(mat)#对列求和 a  b  c  d 28 32 36 40 

0 人点赞