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)
还没有任何评论哟~
