R基础R相关知识R

R matrix 矩阵 整理汇总笔记

2019-11-20  本文已影响0人  11的雾

R语言矩阵是一个二维数组,可以描述二维数据。和向量相似,矩阵内每个元素都拥有相同的模式(数值型、字符型或逻辑型)。

1.创建矩阵

可通过函数matrix()创建矩阵。
·使用格式:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
matrix()函数常用参数

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)

上一篇下一篇

猜你喜欢

热点阅读