1.矩阵的建立
矩阵一般通过函数matrix()来建立。matrix()的调用格式为
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
其中data为向量数据;nrow为矩阵的行数;ncol为矩阵的列数;byrow=TRUE表示按照向量的行排列,默认byrow=FALSE表示按列排列;dimnames为矩阵维数的名称。
> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,dimnames = list(c("row1", "row2"),c("C.1", "C.2", "C.3")))
> mdat
C.1 C.2 C.3
row1 1 2 3
row2 11 12 13
也可以通过函数 diag()创建对角矩阵
> a<-c(1,2,3)
> diag(a)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
单位矩阵的创建
> diag(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
2.矩阵的运算
2.1 与数值型向量的运算类似,相同维数的矩阵可以进行加、减、乘、除四则运算。其运算规则为矩阵的对应元素进行相应的运算。
> m1<-matrix(1:9,nr=3)
> m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m2<-matrix(4:12,nr=3)
> m2
[,1] [,2] [,3]
[1,] 4 7 10
[2,] 5 8 11
[3,] 6 9 12
> m1+m2
[,1] [,2] [,3]
[1,] 5 11 17
[2,] 7 13 19
[3,] 9 15 21
> m1*m2
[,1] [,2] [,3]
[1,] 4 28 70
[2,] 10 40 88
[3,] 18 54 108
> m1-m2
[,1] [,2] [,3]
[1,] -3 -3 -3
[2,] -3 -3 -3
[3,] -3 -3 -3
2.2 矩阵的转置
> m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> t(m1)#转置
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
2.3 矩阵的行列式
> m2
[,1] [,2] [,3]
[1,] 4 7 10
[2,] 5 8 11
[3,] 6 9 12
> det(m2)
[1] -1.065814e-14
2.4 矩阵的乘积
> m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m2
[,1] [,2] [,3]
[1,] 4 7 10
[2,] 5 8 11
[3,] 6 9 12
> m1%*%m2
[,1] [,2] [,3]
[1,] 66 102 138
[2,] 81 126 171
[3,] 96 150 204
2.5 矩阵的逆矩阵
> mat<-matrix(1:4,nr=2)
> mat
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(mat)#矩阵的逆运算
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
2.6 求矩阵的特征值和特征向量
> mat
[,1] [,2]
[1,] 1 3
[2,] 2 4
> eigen(mat)#求特征值和特征向量
$values
[1] 5.3722813 -0.3722813
$vectors
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
3.矩阵的访问
> mat<-matrix(1:12,nr=3)
> mat
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> mat[,2]#第二列
[1] 4 5 6
> mat[3,]#第三行
[1] 3 6 9 12
> mat[2,3]#访问第2行、第3列位置的数据
[1] 8
> mat[1,2]<-0#修改第1行,第2列位置的数据
> mat
[,1] [,2] [,3] [,4]
[1,] 1 0 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> mat[,-1]#删除第1列元素
[,1] [,2] [,3]
[1,] 0 7 10
[2,] 5 8 11
[3,] 6 9 12