R语言矩阵是一个二维数组,可以描述二维数据。和向量相似,矩阵内每个元素都拥有相同的模式(数值型、字符型或逻辑型)。
1.创建矩阵
可通过函数matrix()创建矩阵。
·使用格式:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
matrix()函数常用参数
·实例:创建按照不同方式读取数据的矩阵及定义矩阵的行列名。
##创建矩阵
#创建向量作为矩阵的数据
x<-c(1:10)
#创建一个矩阵,定义矩阵的列数为2,行数为5,按行读取数据
(a<-matrix(x,ncol=2,nrow=5,byrow=T))
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
#创建一个矩阵,定义矩阵的列数为2,行数为5,按列读取数据
> b<-matrix(x)
> dim(b)=c(5,2)
> b
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
#创建一个5行2列,按列读取数据的矩阵,dimnames定义矩阵行列的名称
> (c<-matrix(x,ncol=2,nrow=5,byrow=F,
+ dimnames=list(c("r1","r2","r3","r4","r5"),c("c1","c2"))))
c1 c2
r1 1 6
r2 2 7
r3 3 8
r4 4 9
r5 5 10
2.矩阵转化为向量
矩阵可以通过as.vector()
函数转化为向量。当矩阵转化为向量时,元素按列读取。
·实例:不同数据排列方式的矩阵转化为向量。
##矩阵转化为向量
> x<-c(1:10)
#创建一个5行2列的矩阵,元素按列填充
> (a<-matrix(x,ncol=2,nrow=5,byrow=F))
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
#将矩阵转化为向量
> (b<-as.vector(a))
[1] 1 2 3 4 5 6 7 8 9 10
#创建一个5行2列的矩阵,元素按行填充
> (c<-matrix(x,ncol=2,nrow=5,byrow=T))
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
#将矩阵转化为向量
> (d<-as.vector(c))
[1] 1 3 5 7 9 2 4 6 8 10
3.矩阵索引
跟向量类似,矩阵也可以使用下标和方括号来选择矩阵中的行、列或者元素。X[i,]指矩阵X中的第i行,X[,j]指第j列,X[i,j]指第i行第j个元素。选择多行或多列时,下标i和j可为数值型向量。
·实例:多种不同的矩阵索引方式。
##矩阵索引
#示例矩阵
> x<-c(1:10)
> a<-matrix(x,ncol=2,nrow=5,byrow=F,dimnames=list(c("r1","r2","r3","r4","r5"),c("c1","c2")))
> a
c1 c2
r1 1 6
r2 2 7
r3 3 8
r4 4 9
r5 5 10
#根据位置索引
> a[2,1]
[1] 2
#根据行和列的名称索引
> a["r2","c1"]
[1] 2
#使用一维下标索引
> a[1,] #检索第一行
c1 c2
1 6
> a[,1] #检索第一列
r1 r2 r3 r4 r5
1 2 3 4 5
#使用数值型向量索引
> a[c(3:5),] #检索第三至第五行
c1 c2
r3 3 8
r4 4 9
r5 5 10
4.矩阵的编辑
矩阵的编辑通过函数rbind()和cbind()实现。函数rbind()把其自变量按列的形式纵向拼成一个大矩阵,cbind()把其自变量按行的形式横向拼成一个大矩阵。
cbind()的自变量是矩阵或者看作列向量的向量时,自变量的高度(行数)应该相等。rbind()的自变量是矩阵或者看作行向量的向量时,自变量的宽度(列数)应该相等。如果参与合并的自变量比其变量短,则循环不足后合并。
与向量相似的是,删除矩阵中的元素也可以通过下标和方括号完成。
·实例:矩阵的合并与删除。
##矩阵的编辑
#示例矩阵
> x<-c(1:10)
> (a<-matrix(x,ncol=2,nrow=5,byrow=F))
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
#矩阵合并
> (a1<-rbind(a,c(11,12))) #按行的形式合并
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[6,] 11 12
> (a2<-cbind(a,c(11:15))) #按列的形式合并
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
> (a3<-rbind(a,1)) #按行的形式合并时,循环不足后合并
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[6,] 1 1
> (a4<-cbind(a,1)) #按列的形式合并时,循环不足后合并
[,1] [,2] [,3]
[1,] 1 6 1
[2,] 2 7 1
[3,] 3 8 1
[4,] 4 9 1
[5,] 5 10 1
#删除矩阵中的元素
> (a5<-a[-1,]) #删除矩阵的第一行
[,1] [,2]
[1,] 2 7
[2,] 3 8
[3,] 4 9
[4,] 5 10
> (a6<-a[,-1]) #删除矩阵的第一列
[1] 6 7 8 9 10
5.矩阵的运算
R语言中有丰富的矩阵运算函数,包括四则运算、对矩阵各行列的求和、对矩阵各行列的求均值、转置等。R语言中部分常用的矩阵运算函数见表2-8。
矩阵运算常用函数
矩阵运算常用函数·实例:矩阵的运算。
##矩阵的运算
A<-matrix(c(1:9),ncol=3,nrow=3)
B<-matrix(c(9:1),ncol=3,nrow=3)
#四则运算:加减乘除,要求两个矩阵的维数相同,对对应位置的各元素进行运算
C=2*A+B-B/A
#对矩阵的各列求和
colsums_A=colSums(A)
#对矩阵的各列求均值
colmeans_A=colMeans(A)
#对矩阵的各行求和
rowsums_A=rowSums(A)
#对矩阵的各行求均值
rowmeans_A=rowMeans(A)
#转置运算
trans_A=t(A) #行列转置
#方阵求解行列式
det_A=det(A)
#矩阵的内积
crossprod(A,B)
inner_product=t(A)%*%B #等价于crossprod(A,B)
#矩阵的外积(叉积)
outer(A,B)
cross_product=A%o%B #等价于outer(A,B)
#矩阵的乘法,要求矩阵A的列数和矩阵B的行数相等
(D=A%*%B)
#矩阵取对角运算及生成对角阵
diag_A=diag(A) #矩阵取对角
diag(diag_A) #生成对角阵
#求解逆矩阵,要求矩阵可逆(行列式不为0)
M<-matrix(c(1:8,10),ncol=3,nrow=3)
inverse_M=solve(M)
#求解矩阵的特征值和特征向量
ev_M=eigen(M)
完
网友评论