下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
总结R语言中矩阵运算的函数总结R语言中矩阵运算的函数总结R语言中矩阵运算的函数总结R语言中矩阵运算的函数创立一个向量在R中能够用函数c()来创立一个向量,比如:>x=c(1,2,3,4)>x[1]12342创立一个矩阵在R中能够用函数matrix()来创立一个矩阵,应用该函数时需要输入必需的参数值。>args(matrix)function(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)data项为必需的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制摆列元素时能否按前进行,dimnames给定行和列的名称。比如:matrix(1:12,nrow=3,ncol=4)[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912matrix(1:12,nrow=4,ncol=3)[,1][,2][,3][1,]159[2,]2610[3,]3711[4,]4812matrix(1:12,nrow=4,ncol=3,byrow=T)[,1][,2][,3][1,]123[2,]456[3,]789[4,]101112>rowname[1]"r1""r2""r3"colname=c("c1","c2","c3","c4")colname[1]"c1""c2""c3""c4"matrix(1:12,nrow=3,ncol=4,dimnames=list(rowname,colname))c1c2c3c4r114710r225811矩阵转置A=matrix(1:12,nrow=3,ncol=4)A[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912>t(A)[,1][,2][,3][1,]123[2,]456[3,]789[4,]101112若将函数t()作用于一个向量x,则R默认x为列向量,返回结果为一个行向量,比如:>x[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]"integer"class(t(x))[1]"matrix"若想获得一个列向量,可用t(t(x)),比如:>x[,1][1,]1[2,]2[3,]3[4,]4[5,]5[6,]6[7,]7[8,]8[9,]9[10,]10y=t(t(x))t(t(y))[,1][1,]1[2,]2[3,]3[4,]4[5,]5[6,]6[7,]7[8,]8[9,]9[10,]10矩阵相加减在R中对同行同列矩阵相加减,可用符号:“+”、“-”,比如:A=B=matrix(1:12,nrow=3,ncol=4)A+B[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824>A-B[,1][,2][,3][,4][1,]0000[2,]0000[3,]0000数与矩阵相乘c=2c*A[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824矩阵相乘A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%”,比如:A=matrix(1:12,nrow=3,ncol=4)B=matrix(1:12,nrow=4,ncol=3)A%*%B[,1][,2][,3][1,]70158246[2,]80184288[3,]90210330若A为n×m矩阵,要获得A'B,可用函数crossprod(),该函数计算结果与t(A)%*%B相同,但是效率更高。比如:A=matrix(1:12,nrow=4,ncol=3)B=matrix(1:12,nrow=4,ncol=3)t(A)%*%B[,1][,2][,3][1,]3070110[2,]70174278[3,]110278446crossprod(A,B)[,1][,2][,3][1,]3070110[2,]70174278[3,]110278446矩阵Hadamard积:若A={aij}m×n,B={bij}m×n,则矩阵的Hadamard积定义为:A⊙B={aijbij}m×n,R中Hadamard积能够直接运用运算符“*”比如:A=matrix(1:16,4,4)A[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216B=AA*B[,1][,2][,3][,4][1,]12581169[2,]436100196[3,]949121225[4,]1664144256中这两个运算符的差别区加以注意。矩阵对角元素有关运算比如要取一个方阵的对角元素,A=matrix(1:16,nrow=4,ncol=4)A[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216>diag(A)[1]161116对一个向量应用diag()函数将产生以这个向量为对角元素的对角矩阵,比如:diag(diag(A))[,1][,2][,3][,4][1,]1000[2,]0600[3,]00110[4,]00016对一个正整数z应用diag()函数将产生以z维单位矩阵,比如:diag(3)[,1][,2][,3][1,]100[2,]010[3,]001矩阵求逆矩阵求逆可用函数solve(),应用solve(a,b)运算结果是解线性方程组ax=b,若b缺省,则系统默以为单位矩阵,所以可用其进行矩阵求逆,比如:a=matrix(rnorm(16),4,4)a[,1][,2][,3][,4][1,][2,][3,][4,]>solve(a)[,1][,2][,3][,4][1,]0.[2,]-0.[3,]-1.[4,]>solve(a)%*%a[,1][,2][,3][,4][1,]+00[2,]+00[3,]+00[4,]+00矩阵的特点值与特点向量矩阵A的谱分解为A=UΛU',此中Λ是由A的特点值构成的对角矩阵,U的列为A的特点值对应的特点向量,在R中能够用函数eigen()函数获得U和Λ,>args(eigen)function(x,symmetric,=FALSE,EISPACK=FALSE)此中:x为矩阵,symmetric项指定矩阵x能否为对称矩阵,若不指定,系统将自动检测x能否为对称矩阵。比如:>A=diag(4)+1>A[,1][,2][,3][,4][1,]2111[2,]1211[3,]1121[4,]1112>=eigen(A,symmetric=T)>$values[1]5111$vectors[,1][,2][,3][,4][1,]+00[2,][3,][4,]$vectors%*%diag$values)%*%t$vectors)[,1][,2][,3][,4][1,]2111[2,]1211[3,]1121[4,]1112t$vectors)%*%$vectors[,1][,2][,3][,4][1,]+00[2,]+00[3,]+00[4,]+0010矩阵的Choleskey分解对于正定矩阵A,可对其进行Choleskey分解,即:A=P'P,此中P为上三角矩阵,在R中能够用函数chol()进行Choleskey分解,比如:>A[,1][,2][,3][,4][1,]2111[2,]1211[3,]1121[4,]1112>chol(A)[,1][,2][,3][,4][1,][2,][3,][4,]t(chol(A))%*%chol(A)[,1][,2][,3][,4][1,]2111[2,]1211[3,]1121[4,]1112crossprod(chol(A),chol(A))[,1][,2][,3][,4][1,]2111[2,]1211[3,]1121[4,]1112若矩阵为对称正定矩阵,能够利用Choleskey分解求队列式的值,如:prod(diag(chol(A))^2)[1]5det(A)[1]5若矩阵为对称正定矩阵,能够利用Choleskey分解求矩阵的逆,这时用函数chol2inv(),这类用法更有效。如:>chol2inv(chol(A))[,1][,2][,3][,4][1,][2,][3,][4,]>solve(A)[,1][,2][,3][,4][1,][2,][3,][4,]矩阵奇怪值分解A为m×n矩阵,rank(A)=r,能够分解为:A=UDV',此中U'U=V'V=I。在R中能够用函数scd()进行奇怪值分解,比如:A=matrix(1:18,3,6)A[,1][,2][,3][,4][,5][,6][1,]147101316[2,]258111417[3,]369121518svd(A)$d[1]+01+00$u[,1][,2][,3][1,]0.[2,][3,]-0.$v[,1][,2][,3][1,]-0.[2,]-0.0.[3,]-0.-0.[4,]-0.[5,]-0.0.[6,]-0.-0.>=svd(A)$u%*%diag$d)%*%t$v)[,1][,2][,3][,4][,5][,6][1,]147101316[2,]258111417[3,]369121518t$u)%*%$u[,1][,2][,3][1,]+00[2,]+00[3,]+00t$v)%*%$v[,1][,2][,3][1,]+00[2,]+00[3,]+0012矩阵QR分解A为m×n矩阵能够进行QR分解,A=QR,此中:Q'Q=I,在R中能够用函数qr()进行QR分解,比如:A=matrix(1:16,4,4)qr(A)$qr[,1][,2][,3][,4][1,]+01+01[2,]+00+00[3,][4,]$rank[1]2$qraux[1]+00+00+00$pivot[1]1234attr(,"class")[1]"qr"rank项返回矩阵的秩,
qr
项包括了矩阵
Q和
R的信息,要获得矩阵
Q和
R,能够用函数
()
和()作用qr()的返回结果,比如:>(qr(A))[,1][,2][,3][,4][1,]+01+01[2,]+00+00[3,][4,]+00>(qr(A))[,1][,2][,3][,4][1,]-0.[2,]0.[3,]-0.[4,](qr(A))%*%(qr(A))[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216t(qr(A)))%*%(qr(A))[,1][,2][,3][,4][1,]+00[2,]+00[3,]+00[4,]+00>(qr(A))[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]48121613矩阵广义逆(Moore-Penrose)n×m矩阵A+称为m×n矩阵A的Moore-Penrose逆,假如它知足以下条件:AA+A=A;②A+AA+=A+;③(AA+)H=AA+;④(A+A)H=A+A在R的MASS包中的函数ginv()可计算矩阵A的Moore-Penrose逆,比如:library(“MASS”)>A[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216>ginv(A)[,1][,2][,3][,4][1,][2,][3,][4,]考证性质1:A%*%ginv(A)%*%A[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216考证性质2:ginv(A)%*%A%*%ginv(A)[,1][,2][,3][,4][1,][2,][3,][4,]考证性质3:t(A%*%ginv(A))[,1][,2][,3][,4][1,][2,][3,][4,]A%*%ginv(A)[,1][,2][,3][,4][1,][2,][3,][4,]考证性质4:t(ginv(A)%*%A)[,1][,2][,3][,4][1,][2,][3,][4,]>ginv(A)%*%A[,1][,2][,3][,4][1,][2,][3,][4,]14矩阵Kronecker
积n×m矩阵A与h×k矩阵B的kronecker积为一个nh×mk维矩阵,在R中kronecker积能够用函数kronecker()来计算,比如:A=matrix(1:4,2,2)B=matrix(rep(1,4),2,2)A[,1][,2][1,]13[2,]24B[,1][,2][1,]11[2,]11kronecker(A,B)[,1][,2][,3][,4][1,]1133[2,]1133[3,]2244[4,]2244矩阵的维数在R中很简单获得一个矩阵的维数,函数dim()将返回一个矩阵的维数,nrow()返回行数,ncol()返回列数,比如:A=matrix(1:12,3,4)A[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912nrow(A)[1]3ncol(A)[1]4矩阵的行和、列和、行均匀与列均匀在R中很简单求得一个矩阵的各行的和、均匀数与列的和、均匀数,比如:>A[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912rowSums(A)[1]222630rowMeans(A)[1]colSums(A)[1]6152433colMeans(A)[1]25811上述对于矩阵行和列的操作,还能够使用apply()函数实现。>args(apply)function(X,MARGIN,FUN,...)此中:x为矩阵,MARGIN用来指定是对行运算仍是对列运算,MARGIN=1表示对行运算,MARGIN=2表示对列运算,FUN用来指定运算函数,...用来给定FUN中需要的其余的参数,比如:apply(A,1,sum)[1]222630apply(A,1,mean)[1]apply(A,2,sum)[1]6152433apply(A,2,mean)[1]25811apply()函数功能强盛,我们能够对矩阵的行或许列进行其余运算,比如:计算每一列的方差A=matrix(rnorm(100),20,5)apply(A,2,var)[1]>apply(A,2,function(x,a)x*a,a=2)[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824注意:apply(A,2,function(x,a)x*a,a=2)与A*2成效相同,此处旨在说明怎样应用alpply函数。17矩阵X'X的逆在统计计算中,我们经常需要计算这样矩阵的逆,如OLS预计中求系数矩阵。R中的包“strucchange”供给了有效的计算方法。>args(solveCrossprod)function(X,method=c("qr","chol","solve"))此中:method指定求逆方法,采用“qr”效率最高,采用“chol”精度最高,采用“slove”与slove(crossprod(x,x))成效相同,比如:A=matrix(rnorm(16),4,4)solveCrossprod(A,method="qr")[,1][,2][,3][,4][1,][2,][3,][4,]solveCrossprod(A,method="chol")[,1][,2][,3][,4][1,][2,][3,][4,]solveCrossprod(A,method="solve")[,1][,2][,3][,4][1,][2,][3,][4,]solve(crossprod(A,A))[,1][,2][,3][,4][1,][2,][3,][4,]取矩阵的上、下三角部分在R中,我们能够很方便的取到一个矩阵的上、下三角部分的元素,函数()和函数()供给了有效的方法。>argsfunction(x,diag=FALSE)函数将返回一个逻辑值矩阵,此中下三角部分为真,上三角部分为假,选项diag为真时包括对角元素,为假时不包括对角元素。()的成效与之孑然相反。比如:>A[,1][,2][,3][,4][1,]15913[2,]261014[3,]371115[4,]481216>(A)[,1][,2][,3][,4][1,]FALSEFALSEFALSEFALSE[2,]TRUEFALSEFALSEFALSE[3,]TRUETRUEFALSEFALSE[4,]TRUETRUETRUEFALSE>(A,diag=T)[,1][,2][,3][,4][1,]TRUEFALSEFALSEFALSE[2,]TRUETRUEFALSEFALSE[3,]TRUETRUETRUEFALSE[4,]TRUETRUETRUETRUE>(A)[,1][,2][,3][,4][1,]FALSETRUETRUETRUE[2,]FALSEFALSETRUETRUE[3,]FALSEFALSEFALSETRUE[4,]FALSEFALSEFALSEFALSE(A,diag=T)[,1][,2][,3][,4][1,]TRUETRUETRUETRUE[2,]FALSETRUETRUETRUE[3,]FALSEFALSETRUETRUE[4,]FALSEFALSEFALSETRUEA[(A)]=0A[,1][,2][,3][,4][1,]15913[2,]061014[3,]001115[4,]00016A[(A)]=0A[,1][,2][,3][,4][1,]1000[2,]2600[3,]37110[4,]48121619backsolve&fowardsolve函数这两个函数用于解特别线性方程组,其特别之处在于系数矩阵为上或下三角。>args(backsolve)function(r,x,k=ncol(r),=TRUE,transpose=FALSE)>args(forwardsolve)function(l,x,k=ncol(l),=FALSE,transpose=FALSE)此中:r或许的形式不一样
l为
n×n维三角矩阵,
x为
n×1维向量,对给定不一样的和
transpose
的值,方程对于函数
backsolve()
而言,比如:>A=matrix(1:9,3,3)>A[,1][,2][,3][1,]147[2,]258[3,]369x=c(1,2,3)x123>B=AB[(B)]=0B[,1][,2][,3][1,]100[2,]250[3,]369>C=AC[(C)]=0C[,1][,2][,3][1,]147[2,]058[3,]009>backsolve(A,x,=T,transpose=T)[1]-0.solve(t(C),x)[1]-0.backsolve(A,x,=T,transpose=F)[1]solve(C,x)[1]backsolve(A,x,=F,transpose=T)[1]solve(t(B),x)[1]backsolve(A,x,=F,transpose=F)[1]100solve(B,x)[1]+00对于函数forwardsolve()而言,比如:>A[,1][,2][,3][1,]147[2,]258[3,]369>B[,1][,2][,3][1,]100[2,]250[3,]369>C[,1][,2][,3][1,]147[2,]058[3,]009>x[1]123forwardsolve(A,x,=T,transpose=T)[1]-0.solve(t(C),x)[1]-0.forwardsolve(A,x,=T,transpose=F)[1]solve(C,x)[1]forwardsolve(A,x,=F,transpose=T)[1]solve(t(B),x)[1]>forwardsolve(A,x,=F,transpose=F)[1]100solve(B,x)[1]+0020row()与col()函数在R中定义了的这两个函数用于取矩阵元素的行或列下标矩阵,比如矩阵A={aij}m×n,row()函数将返回一个与矩阵A有相同维数的矩阵,该矩阵的第i行第j列元素为i,函数col()近似。比如:>x=matrix(1:12,3,4)>row(x)[,1][,2][,3][,4][1,]1111[2,]2222[3,]3333>col(x)[,1][,2][,3][,4][1,]1234[2,]1234[3,]1234这两个函数相同能够用于取一个矩阵的上下三角矩阵,比如:>x[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912x[row(x)<col(x)]=0x[,1][,2][,3][,4][1,]1000[2,]2500[3,]3690x=matrix(1:12,3,4)x[row(x)>col(x)]=0x[,1][,2][,3][,4][1,]14710[2,]05811[3,]00912队列式的值在R中,函数det(x)将计算方阵x的队列式的值,比如:x=matrix(rnor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学廉政文化进校园活动实施方案(四篇)
- 2024年幼儿园教师培训计划模版(4篇)
- 全国化妆品配方技术职业技能大赛理论考试题及答案
- 装订技能竞赛理论知识考试题库500题(含答案)
- 2024年10月自考03709马克思主义基本原理概论试题及答案含解析
- 2024建筑工程居间服务合同
- 二零二四年度无人机制造销售合同
- 2024宿舍装修合同书协议
- 2024完整小产权合同范本
- 二零二四年智能锁行业市场调研合同
- 2023年全国职业院校技能大赛赛项-ZZ019 智能财税基本技能赛题 - 模块二-答案
- 部编版道德与法治一年级上册全册课件
- 人教版新目标英语八年级下册《The Present Perfect Tense(复习现在完成时) Section A 》说课稿4
- 走近邮政-讲中国故事智慧树知到答案2024年西安邮电大学
- 环保管家管家式管家式高效服务合同
- 代收款三方协议书(2024版)
- 大学生职业生涯规划与发展智慧树知到期末考试答案章节答案2024年东北农业大学
- 华中科技大学青年长江学者答辩模板
- 信用管理师考试:助理信用管理师(题库版)
- 人教鄂教版(2024秋)一年级上册3.9《纸制品》 教案
- 社区积分超市实施方案
评论
0/150
提交评论