Advertisement

R语言:矩阵

阅读量:

R语言: 矩阵

在研究线性代数的过程中,R 语言提供了独特的矩阵类型作为核心工具。在其他编程语言中,通常使用二维数组来表示类似的结构。相比之下,在 R 中实现这些矩阵运算则更加方便和高效。其中元素的形式多样,既可以是数值型数据(如整数、浮点数),也可以是符号变量或复杂的数学表达式。

函数 说明
data 向量,矩阵的数据
nrow 行数
ncol 列数
byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列
dimname 设置行和列的名称

创建矩阵

在R语言中,主要通过matrix函数来完成矩阵的创建。

复制代码
    m <- matrix(1:8,nrow=2)
    m <- matrix(1:8,nrow=2,byrow=T)
    
    
      
      
    
    AI写代码
复制代码
     > #默认按列创建矩阵
    > m <- matrix(1:8,nrow=2)
    > m
     [,1] [,2] [,3] [,4]
    [1,]    1    3    5    7
    [2,]    2    4    6    8
    > #按行创建矩阵
    > m <- matrix(1:8,nrow=2,byrow=T)
    > m
     [,1] [,2] [,3] [,4]
    [1,]    1    2    3    4
    [2,]    5    6    7    8
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

倒置矩阵

R 语言矩阵提供了 t() 函数,可以实现矩阵的行列互换。

例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。

复制代码
    t( )
    
    
      
    
    AI写代码
复制代码
    > m <- matrix(1:8,nrow=2)
    > m
     [,1] [,2] [,3] [,4]
    [1,]    1    3    5    7
    [2,]    2    4    6    8
    > t(m)
     [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]    5    6
    [4,]    7    8
    
    
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

矩阵运算

维度一致的矩阵之间能够相互加减,其操作方式是对每个对应位置上的元素进行加减运算。

复制代码
    > m1 <-matrix(1:4,nrow=2)
    > m2 <-matrix(2:5,nrow=2)
    > m1;m2
     [,1] [,2]
    [1,]    1    3
    [2,]    2    4
     [,1] [,2]
    [1,]    2    4
    [2,]    3    5
    > m1+m2
     [,1] [,2]
    [1,]    3    7
    [2,]    5    9
    > m1*m2 #对应位置相乘
     [,1] [,2]
    [1,]    2   12
    [2,]    6   20
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

矩阵运算规则相对繁琐。两个矩阵之间存在可乘性关系,只有在第一个矩阵的列数与第二个矩阵的行数相等时才成立。

复制代码
    > m1 <-matrix(1:6,nrow=3)
    > m2 <-matrix(2:7,nrow=2)
    > m1;m2
     [,1] [,2]
    [1,]    1    4
    [2,]    2    5
    [3,]    3    6
     [,1] [,2] [,3]
    [1,]    2    4    6
    [2,]    3    5    7
    > m1%*%m2
     [,1] [,2] [,3]
    [1,]   14   24   34
    [2,]   19   33   47
    [3,]   24   42   60
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

矩阵索引

复制代码
    > m <-matrix(1:12,nrow=4)
    > m
     [,1] [,2] [,3]
    [1,]    1    5    9
    [2,]    2    6   10
    [3,]    3    7   11
    [4,]    4    8   12
    
    
      
      
      
      
      
      
      
    
    AI写代码

输出第2-3列

复制代码
    > m[,2:3]
     [,1] [,2]
    [1,]    5    9
    [2,]    6   10
    [3,]    7   11
    [4,]    8   12
    
    
      
      
      
      
      
      
      
    
    AI写代码

输出第1-3行

复制代码
    > m[1:2,]
     [,1] [,2] [,3]
    [1,]    1    5    9
    [2,]    2    6   10
    
    
      
      
      
      
    
    AI写代码

输出列表中元素,按列级优先

复制代码
    > m[1:3]
    [1] 1 2 3
    > m[1:5]
    [1] 1 2 3 4 5
    
    
    
      
      
      
      
      
    
    AI写代码

列表删除

复制代码
    > m <- matrix(1:12, nrow= 4)
    > m
     [,1] [,2] [,3]
    [1,]    1    5    9
    [2,]    2    6   10
    [3,]    3    7   11
    [4,]    4    8   12
    
    
      
      
      
      
      
      
      
    
    AI写代码

删除第一行

复制代码
    > m[-1,]
     [,1] [,2] [,3]
    [1,]    2    6   10
    [2,]    3    7   11
    [3,]    4    8   12
    
    
      
      
      
      
      
    
    AI写代码

删除第一列

复制代码
    > m[,-1]
     [,1] [,2]
    [1,]    5    9
    [2,]    6   10
    [3,]    7   11
    [4,]    8   12
    
    
      
      
      
      
      
      
    
    AI写代码

删除第一行和第一类

复制代码
    > m[-1,-1]
     [,1] [,2]
    [1,]    6   10
    [2,]    7   11
    [3,]    8   12
    
    
      
      
      
      
      
    
    AI写代码

组合矩阵数据

复制代码
    cbind( )
    rbind( )
    
    
      
      
    
    AI写代码
复制代码
    > m<-matrix(1:20,nrow=5)
    > m
     [,1] [,2] [,3] [,4]
    [1,]    1    6   11   16
    [2,]    2    7   12   17
    [3,]    3    8   13   18
    [4,]    4    9   14   19
    [5,]    5   10   15   20
    > col.v<-matrix(21:40,nrow=5)
    > col.v
     [,1] [,2] [,3] [,4]
    [1,]   21   26   31   36
    [2,]   22   27   32   37
    [3,]   23   28   33   38
    [4,]   24   29   34   39
    [5,]   25   30   35   40
    > cbind(m,col.v)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
    [1,]    1    6   11   16   21   26   31   36
    [2,]    2    7   12   17   22   27   32   37
    [3,]    3    8   13   18   23   28   33   38
    [4,]    4    9   14   19   24   29   34   39
    [5,]    5   10   15   20   25   30   35   40
    > rbind(m,col.v)
      [,1] [,2] [,3] [,4]
     [1,]    1    6   11   16
     [2,]    2    7   12   17
     [3,]    3    8   13   18
     [4,]    4    9   14   19
     [5,]    5   10   15   20
     [6,]   21   26   31   36
     [7,]   22   27   32   37
     [8,]   23   28   33   38
     [9,]   24   29   34   39
    [10,]   25   30   35   40
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

apply函数

对矩阵的每一行或每一列施加函数
apply(m, dim.index, f)
其中dim.index取值为1时表示对每一行施加函数f;取值为2时则表示对每一列施加函数f。

复制代码
    > m<- matrix(1:6, nrow = 3 )
    > m
     [,1] [,2]
    [1,]    1    4
    [2,]    2    5
    [3,]    3    6
    > #求每一行的最大值
    > apply(m,1,max)
    [1] 4 5 6
    > #求每—列的最大值
    > apply (m,2, max)
    [1] 3 6
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

全部评论 (0)

还没有任何评论哟~