美文网首页R基础R相关知识R
R matrix 矩阵 整理汇总笔记

R matrix 矩阵 整理汇总笔记

作者: 11的雾 | 来源:发表于2019-11-20 13:21 被阅读0次

    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)
    

    相关文章

      网友评论

        本文标题:R matrix 矩阵 整理汇总笔记

        本文链接:https://www.haomeiwen.com/subject/fnloictx.html