R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法。下面列出一些常用的矩阵操作方法示例。


矩阵的生成

> mat <- matrix(1:16, ncol = 4, nrow = 4, byrow=TRUE, dimnames=list(c(paste("x", 1:4, sep = ".")), c(paste("y", 1:4, sep = "."))))
> maty.1 y.2 y.3 y.4
x.1   1   2   3   4
x.2   5   6   7   8
x.3   9  10  11  12
x.4  13  14  15  16
# 矩阵的行列名还可以使用rownames或者colnames进行修改
> rownames(mat) <- paste("row", 1:4, sep=".")
> colnames(mat) <- paste("col", 1:4, sep=".")
> matcol.1 col.2 col.3 col.4
row.1     1     2     3     4
row.2     5     6     7     8
row.3     9    10    11    12
row.4    13    14    15    16

矩阵的维度

# 表示这是一个4行4列的矩阵
> dim(mat)
[1] 4 4

矩阵的加减

> mat.2 <- matrix(51:66, nrow = 4)
> mat.2[,1] [,2] [,3] [,4]
[1,]   51   55   59   63
[2,]   52   56   60   64
[3,]   53   57   61   65
[4,]   54   58   62   66
> mat.plus <- mat + mat.2
> mat.pluscol.1 col.2 col.3 col.4
row.1    52    57    62    67
row.2    57    62    67    72
row.3    62    67    72    77
row.4    67    72    77    82
> mat.minus <- mat - mat.2
> mat.minuscol.1 col.2 col.3 col.4
row.1   -50   -53   -56   -59
row.2   -47   -50   -53   -56
row.3   -44   -47   -50   -53
row.4   -41   -44   -47   -50

矩阵的转置

> t(mat)row.1 row.2 row.3 row.4
col.1     1     5     9    13
col.2     2     6    10    14
col.3     3     7    11    15
col.4     4     8    12    16

矩阵相乘

# 若A矩阵的维度为m*n,那么B矩阵的维度应为n*p
# 生成的结果矩阵的维度为m*p
> mat.3 <- matrix(1:8, nrow = 4)
> mat.3[,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> mat.mcl <- mat %*% mat.3
> mat.mcl[,1] [,2]
row.1   30   70
row.2   70  174
row.3  110  278
row.4  150  382

返回矩阵的对角

> diag(mat)
[1]  1  6 11 16

生成上三角或下三角矩阵

# 生成上三角矩阵,注意这里的diag参数如果为TRUE,
# 表示把矩阵对角也包括进来。设置为FALSE就是不包括。
> mat[!upper.tri(mat, diag = TRUE)] <- 0
> matcol.1 col.2 col.3 col.4
row.1     1     2     3     4
row.2     0     6     7     8
row.3     0     0    11    12
row.4     0     0     0    16
# 生成下三角矩阵
> mat[!lower.tri(mat, diag = TRUE)] <- 0
> matcol.1 col.2 col.3 col.4
row.1     1     0     0     0
row.2     5     6     0     0
row.3     9    10    11     0
row.4    13    14    15    16

求解逆矩阵

> solve(mat)row.1         row.2       row.3  row.4
col.1  1.00000000  6.832142e-17  0.00000000 0.0000
col.2 -0.83333333  1.666667e-01  0.00000000 0.0000
col.3 -0.06060606 -1.515152e-01  0.09090909 0.0000
col.4 -0.02651515 -3.787879e-03 -0.08522727 0.0625

求行列式的值

> det(mat)
[1] 4.733165e-30

矩阵的特征值和特征向量

> mat.e <- eigen(mat)
> mat.e
eigen() decomposition
$values
[1]  3.620937e+01 -2.209373e+00 -3.188632e-15 -1.348401e-16$vectors[,1]       [,2]       [,3]        [,4]
[1,] -0.1511543  0.7270500  0.5037002 -0.06456091
[2,] -0.3492373  0.2832088 -0.8319577 -0.31932112
[3,] -0.5473203 -0.1606324  0.1528148  0.83232496
[4,] -0.7454033 -0.6044736  0.1754427 -0.44844294
# 可以使用mat.e$values和mat.e$vectors取出结果

奇异值分解

> svd(mat)
$d
[1] 3.862266e+01 2.071323e+00 7.609772e-16 3.860638e-16$u[,1]        [,2]       [,3]        [,4]
[1,] -0.1347221 -0.82574206  0.3812474 -0.39325613
[2,] -0.3407577 -0.42881720 -0.2152141  0.80850658
[3,] -0.5467933 -0.03189234 -0.7133141 -0.43724476
[4,] -0.7528288  0.36503251  0.5472808  0.02199431$v[,1]       [,2]       [,3]       [,4]
[1,] -0.4284124  0.7186535  0.2825595 -0.4692122
[2,] -0.4743725  0.2738078 -0.7264762  0.4150089
[3,] -0.5203326 -0.1710379  0.6052738  0.5776189
[4,] -0.5662928 -0.6158835 -0.1613571 -0.5234156

QR分解

> qr(mat)
$qrcol.1       col.2         col.3         col.4
row.1 -16.6132477 -18.2986497 -1.998405e+01 -2.166945e+01
row.2   0.3009646  -1.0767638 -2.153528e+00 -3.230291e+00
row.3   0.5417363  -0.3456506  1.350645e-15  3.139336e-15
row.4   0.7825080  -0.9120325  1.643990e-01  7.300782e-17$rank
[1] 2$qraux
[1] 1.060193e+00 1.220731e+00 1.986394e+00 7.300782e-17$pivot
[1] 1 2 3 4attr(,"class")
[1] "qr"
> qr.Q(qr(mat))[,1]        [,2]       [,3]       [,4]
[1,] -0.06019293 -0.83449195 -0.3906679 -0.3838992
[2,] -0.30096463 -0.45762462  0.2347489  0.8030523
[3,] -0.54173634 -0.08075729  0.7025058 -0.4544068
[4,] -0.78250805  0.29611005 -0.5465868  0.0352538
> qr.R(qr(mat))col.1      col.2         col.3         col.4
row.1 -16.61325 -18.298650 -1.998405e+01 -2.166945e+01
row.2   0.00000  -1.076764 -2.153528e+00 -3.230291e+00
row.3   0.00000   0.000000  1.350645e-15  3.139336e-15
row.4   0.00000   0.000000  0.000000e+00  7.300782e-17

r语言中矩阵QR分解_R语言常用的矩阵操作相关推荐

  1. 矩阵的QR分解c语言编程,[矩阵的QR分解系列五] Eigen中的QR分解

    之前介绍的矩阵的三角分解系列介绍了利用矩阵初等变换解决了矩阵三角化问题以及具体的三角分解.但是以初等变换工具的三角分解方法并不能消除病态线性方程组不稳定问题,而且有时候对于可逆矩阵有可能也不存在三角分 ...

  2. Python+numpy实现矩阵QR分解

    感谢广东东软学院计算机系赵晨杰老师的交流. 如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解. Python扩展库numpy实现了矩 ...

  3. Julia 矩阵QR分解和特征值

    Julia 矩阵QR分解和特征值 前言 1. 施密特正交 (1) 利用施密特正交求出正交矩阵Q (2) 求出上三角矩阵R (3) 改进的消减QR分解 2. 完全QR分解 3. 矩阵QR分解的作用 (1 ...

  4. QR算法的Matlab 程序,三种实现矩阵QR分解的算法与程序

    To learn, to share, to debate, then comes progress. ------------------------------------------------ ...

  5. verilog语言中的@什么意思 verilog语言中的@什么意思

    verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...

  6. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...

    下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...

  7. (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解)

    (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解) 文章目录 (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解) 1.埃 ...

  8. r语言中进行数据可视化_R中的数据可视化

    r语言中进行数据可视化 R programming was developed in 1993 for making graphs and producing statistical results. ...

  9. r指引到文件夹_R语言中进行文件夹及文件夹内文件操作范例

    rm(list=ls()) path = 'J:/lab/EX29 –在R语言中进行文件(夹)操作' setwd(path) cat("file A\n", file=" ...

最新文章

  1. 端口聚合与Trunk综合配置
  2. linux安装jdk8_Skywalking系列博客1-安装单机版 Skywalking
  3. Gdiplus byte *数据转换为Bitmap类型图片
  4. bzoj3551 [ONTAK2010]Peaks加强版 kruskal重构树
  5. Linux shell中比较操作符“==”与“-eq”对比
  6. 计算机硬盘存绝密,教您创建自己的绝密磁盘
  7. 管理新语:年龄经验并不能让一个医生律师厉害,而是他本来就厉害
  8. “刑不上大夫,礼不下庶人”真实意思是什么
  9. 数学建模论文写作模板
  10. 计算机中学期末考试,[探析我国中学计算机教育]计算机基础大一考试题
  11. 数字图像处理基础(3)--图像合成
  12. MCE公司:更有效的新型小分子CDK9抑制剂
  13. Linux下Socket编程之UDP原理
  14. WeCenter 与 UCenter 对接
  15. oracle cux,EBS增加客制应用CUX:Custom Application
  16. 少壮不努力,ChatGPT来代替!
  17. 283个地级及以上城市地理距离、经济距离和引力模型空间权重矩阵
  18. Python播放音乐的五种方法
  19. Windows Jenkins安装及配置
  20. HDMI CEC协议

热门文章

  1. BPMF论文辅助笔记: 固定U,更新θU 部分推导
  2. MATLAB实战应用案例:欧拉法、改进欧拉法、ode45求解微分方程实例
  3. Flink从入门到精通100篇(二十二)-Apache Flink OLAP引擎性能优化及应用
  4. 产品经理必备知识之网页设计系列(一)-创建出色用户体验
  5. 从无到有算法养成篇-栈和队列·队列
  6. oracle in与exists的使用
  7. java 访问 网络swf_JAVA访问网络资源
  8. python画图的模块_python强大的绘图模块matplotlib示例讲解
  9. 【LeetCode从零单排】No118 Pascal's Triangle
  10. 斯坦福机器学习公开课学习笔记(3)—拟合问题以及局部权重回归、逻辑回归