R语言基础学习:矩阵及矩阵的基础操作

R语言的矩阵在数据操作的工作中十分的方便,也十分实用,给批量操作提供了简便的工具:

以下是整理的上课笔记:

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#矩阵的建立:matrix(data=x,nrow=m,ncol=n,byrow=TRUE)
#x -> 元素的向量; n -> 列数; m -> 行数;
#byrow -> 决定了元素是否按行排列(TRUE:按行排列;FALSE:按列排列)

#第一种建立
m<-matrix(1:10,nrow=3,ncol=5,byrow=TRUE)
m   
#索引
m[1,3]  #精准查找,精确到m行,n列
m[1,]   #按行查找
m[,2]   #按列查找

#第二种建立,“先定义,后填充”
m<-matrix(0,nrow=5,ncol=5,byrow=TRUE)
m
m[1,]<-c(1:5) #按行填充元素
m[,2]<-c(1:5) #按列填充元素
m[3,3]<-9     #精却位置填充元素
m[1:2,2:3]<-c(5:8)  #按区块填充,案列排列元素

#矩阵的操作
#矩阵的转置,t(矩阵名)
m2<-t(m)+m
m2
#对称矩阵的特征根、特征向量: eigen(矩阵名)
eigen(m2)
#生成下三角矩阵(数学角度)
m<-matrix(0,nrow=5,ncol=5)
for(i in 1:5){
	m[i,i]<-(1+i)/2*i   #对角线位置的数值是梯形的面积值
	for(j in 1:i){
		m[i,i-j]<-m[i,i]-j   #从对角线位置,向前依次减少‘1’
	}
};m;
#生成下三角矩阵(编程语言角度)
m<-matrix(0,nrow=5,ncol=5)
h<-1
for(i in 1:5){
	for(j in 1:i){
		m[i,j]<-h
		h<-h+1
	}
};m;

#查矩阵的维数,dim(m)
dim(m)
dim(m)<-c(5,4)  #矩阵大小(元素个数)不变,重置矩阵的维数(i行,j列 的矩阵),dim(m)<-c(i,j)
#¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
x<-sample(1:50,16)
y<-sample(1:50,16)
z<-sample(1:50,25)
m1<-matrix(x,nrow=4,ncol=4,byrow=T)
m2<-matrix(y,nrow=4,ncol=4,byrow=T)
m3<-matrix(z,nrow=5,ncol=5,byrow=T)
m1;m2;m3;
#矩阵的运算+、-、%*%、%/%
m1+m2;m1-m2;	#矩阵中的对应元素相加、减
m1+m3;m1-m3;	#报错:两个元素个数和排列不对应的矩阵不能相加、减

2*m1		##数乘:矩阵每个元素都乘以一个常数
m1%*%m2	#矩阵乘法
m1*m2		#矩阵对应元素相乘

#求逆(通过解方程方式):solve(m) 求m矩阵的逆
solve(m1)

#矩阵转置 t(m)
t(m1)

#去矩阵对角线 diag(m)
diag(m1)

#求矩阵(必须是方阵)行列式  det(m)
det(m1)
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

#矩阵的合并
#1、按行合并rbind(x,y):x在上,y在下
#2、按列合并cbind(x,y):x在左,y在右

x<-matrix(1:25,nrow=5,ncol=5,byrow=T)
y<-matrix(1:10,nrow=2,ncol=5,byrow=T)
rbind(x,y)
cbind(x,t(y))

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#apply(m,1 or 2,f,farge)  m为被操作矩阵,1 表示对行进行操作,2 表示对列进行操作
#f 是操作函数,farge 是操作函数的参数
apply(x,1,sum)
apply(x,2,sum)
apply(x,1,mean)

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#对矩阵的行和列进行命名
rownames(x)<-c('a','b','c','d','e')	#对行命名
colnames(x)<-c('A','B','C','D','E')	#对列命名
dimnames(x)	#查看行和列的名字

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#例题:列出一个(0,1)矩阵;判断每一行1的个数是否大于行的长度的一半,若大于,记为“张”。
x<-rep(c(0,1),length=1000)
y<-sample(x,400)
M<-matrix(y,nrow=20,ncol=20)

mydef<-function(x){
	n<-0
	ifelse(sum(x)>length(x)/2,n<-'张',n<-'0')
	n
}

a<-apply(M,1,mydef)
a

#—————————————————————————————————————

 

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值