R语言(2)——矩阵
来源:互联网 发布:马勒 交响曲 知乎 编辑:程序博客网 时间:2024/05/17 09:11
1 矩阵简述
矩阵本质上是一种向量,只是比向量多两个属性:行数和列数;矩阵也有模式:如字符型,数值型。
> m<-matrix(1:8,nrow=4)> m [,1] [,2][1,] 1 5[2,] 2 6[3,] 3 7[4,] 4 8> nrow(m) #获取矩阵行数[1] 4> ncol(m) #获取矩阵列数[1] 2> dim(m) #获取行列数[1] 4 2> attributes(m) #显然矩阵是一个class,有自己的属性$dim[1] 4 2
2 创建矩阵
2.1
#方法一,确定好矩阵的行、列数> y<-matrix(c(1,2,3,4),nrow=2,ncol=2)> y [,1] [,2][1,] 1 3[2,] 2 4#方法二,只确定矩阵的行数> y<-matrix(c(1,2,3,4),nrow=2)> y [,1] [,2][1,] 1 3[2,] 2 4#方法三,不填充数值向量,再后面的代码中填充> y<-matrix(nrow=2,ncol=4)> y [,1] [,2] [,3] [,4][1,] NA NA NA NA[2,] NA NA NA NA#方法四: 注意,将向量填充进矩阵时,默认都是按列排列向量的,而通过 <span style="font-family: Arial, Helvetica, sans-serif;">byrow=T, 可以将向量按行排列。</span>> y<-matrix(1:8,nrow=2,byrow=T)> y [,1] [,2] [,3] [,4][1,] 1 2 3 4[2,] 5 6 7 8
3矩阵的一般运算
3.1 矩阵乘法
# 矩阵乘法: %*%> x<-matrix(1:8,nrow=4)> x [,1] [,2][1,] 1 5[2,] 2 6[3,] 3 7[4,] 4 8> y<-matrix(1:8,nrow=2)> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8> y%*%x [,1] [,2][1,] 50 114[2,] 60 140
3.2 矩阵的提取
#方法一:提取矩阵的二至四列> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8> y[,2:4] [,1] [,2] [,3][1,] 3 5 7[2,] 4 6 8#方法二:去掉矩阵的第一列> y[,-1] [,1] [,2] [,3][1,] 3 5 7[2,] 4 6 8
3.3 元素的筛选
#矩阵的筛选和向量类似,原理也相似> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8> y[,y[2,]>4] [,1] [,2][1,] 5 7[2,] 6 8#上述筛选方法的原理> y[2,]>4[1] FALSE FALSE TRUE TRUE
3.4 矩阵的行、列数的变化
矩阵不能增加一行(列)或删除一行(列),类似的功能需要对矩阵进行重新赋值的操作。
> y[2,3]<-4> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 4 8
> x<-1> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 4 8#给y添加一行> rbind(y,x) [,1] [,2] [,3] [,4] 1 3 5 7 2 4 4 8x 1 1 1 1#给y添加一列> cbind(y,x) x[1,] 1 3 5 7 1[2,] 2 4 4 8 1#注意,上述操作中显然x的数量不足以填充y的一行或一列,但是R自动使用了循环赋值,及重复x的值,以使x中的元素达到需要的数量。
rbind(),cbind()的本质也是要创建一个新的矩阵,这是很费时的。
4.1 apply函数是用来对矩阵的每一行或每一列调用一次某个函数的函数,
apply(m,dimcode,f,fargs)
参数解释:
- m为矩阵
- dimcode是维度编号,取1表示对m矩阵中的每一行应用函数,取2代表对m矩阵中的每一列应用函数
- f是应用在行或列上的函数
- fargs是f的可选参数集
4.2 简单的实例
> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8> mean(y)[1] 4.5> apply(y,1,mean)[1] 4 5
5 避免意外降维
> y [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 4 8> x<-y[1,]> x[1] 1 3 5 7> attributes(x)NULL
在上免得代码中,x是y矩阵的第一行,是y的子矩阵。x本质上是一个一行四列的矩阵。而,当我们从一种将x取出是,R自动将x降维成向量。虽然大多数情况下,并不应印象我们的操作和处理,但是在运行复杂代码时,可能会出现因此原因出现一些意想不到的错误。以此,要尽力避免这种意外降维。可采用如下方法,使R不自作主张的降维
> x<-y[1,,drop=FALSE]> x [,1] [,2] [,3] [,4][1,] 1 3 5 7
0 0
- R语言(2)——矩阵
- R语言学习——向量矩阵
- R语言入门——矩阵和数组的操作
- R数据结构—矩阵
- R语言——入门系列1(简介、向量、矩阵)
- (R语言)数组和矩阵
- R语言矩阵运算
- R语言矩阵运算
- R语言矩阵运算
- R语言矩阵运算
- R语言矩阵运算
- R语言矩阵运算
- R语言 矩阵运算
- R语言矩阵运算
- R语言--矩阵篇
- R语言——2
- R语言—R语言常用语法
- 【R语言 矩阵相乘】R语言矩阵相乘100次
- wordpress加载慢解决
- 【译】JavaScript规范-葵花宝典
- C 获取内存信息并输出
- mysql SQL Error: 1366, SQLState: HY
- 装修点点滴滴
- R语言(2)——矩阵
- 【cocos2dx 3.2】一个都不能死3 障碍物层
- Java基础_GUI
- 【cocos2dx 3.2】一个都不能死4 游戏层
- 简单常用类:Math 、Random、System、Integer、Character、BigInteger、BigDecimal等
- youcomplete配置
- 【cocos2dx 3.2】一个都不能死5 物理边界层
- 【cocos2dx 3.2】一个都不能死6 主场景层
- OC-字符串、数组常见问题