这方面有需求

很棒的内容,转载不了我就直接扣过来了~~对这方面有需求的读者不妨收藏一下。

作者:张丹(Conan)来源:http://blog.fens.me/r-matrix/

前言

R 是作为统计语言,生来就对数学有良好的支持。矩阵计算作为底层的数学工具,有非常广泛的使用场景。用R语言很好地封装了,矩阵的各种计算方法,一个函数一行代码,就能完成复杂的矩阵分解等操作。让建模人员可以更专注于模型推理和业务逻辑实现,把复杂的矩阵计算交给R语言来完成。
本文总结了 R 语言用于矩阵的各种计算操作。

1. 基本操作

# 生成矩阵 

取对角线元素,生成对角矩阵:

# 对角线元素

上三角,下三角:

# 上三角

矩阵转置:

20,

对角矩阵填充:

# 创建方阵

填充后,发现矩阵并不是对称的,原因是上三角取值按列取值,所以先取 10 后取 13,导致上三角和下三角取值顺序不完全一致。

16,

调整后,我们要先转置,再取值再填充,形成对称结构。

20,

矩阵和 data.frame 转换,用行列形成索引结构。

12,

2. 矩阵计算

加法,减法。

# 加载矩阵计算工具包

矩阵值相乘。

> m0*m1     [,1] [,2] [,3] [,4] [,5][1,]   40  395  873  741 1326[2,]  186  192  480  112 1710[3,]  189   42  616  180  171[4,]  112  248  864  432  520

矩阵乘法,满足第二个矩阵的列数和第一个矩阵的行数相等,所以把上面生成的 m0 矩阵( 4 行 5 列)转置为( 5 行 4 列),再用 m1 矩阵( 4 行 5 列),进行矩阵乘法,得到一个 5 行 5 列的结果矩阵。

> t(m0)%*%m1     [,1] [,2] [,3] [,4] [,5][1,]  527  285  649  217  399[2,] 1423  877 1741  633 1231[3,] 2319 1469 2833 1049 2063[4,] 3215 2061 3925 1465 2895[5,] 4111 2653 5017 1881 3727

# 通过函数实现矩阵相乘> crossprod(m0,m1)     [,1] [,2] [,3] [,4] [,5][1,]  527  285  649  217  399[2,] 1423  877 1741  633 1231[3,] 2319 1469 2833 1049 2063[4,] 3215 2061 3925 1465 2895[5,] 4111 2653 5017 1881 3727

矩阵外积。

6,

矩阵直和。

4,

矩阵直积。

4,

3. 矩阵性质

3.1 奇异矩阵

首先,我们线创建一个非奇异矩阵,判断非奇异矩阵方法,行列式不等于 0,矩阵可逆,满秩。

# 创建一个非奇异矩阵

再创建一个奇异矩阵,判断奇异矩阵方法包括,行列式等于 0,矩阵不可逆,不是满秩。

# 奇异矩阵

3.2 逆矩阵

# 创建方阵,非奇异矩阵
> m0100,16),4,4);m0
     [,1] [,2] [,3] [,4]
[1,]   24   31   80   37
[2,]   84   13   42   71
[3,]   95   62   93   86
[4,]   69   16   94   35# 计算矩阵的逆矩阵
> solve(m0)
            [,1]          [,2]        [,3]         [,4]
[1,] -0.03083680 -0.0076561475  0.01258023  0.017218514
[2,] -0.01710957 -0.0270246488  0.03152548 -0.004553923
[3,]  0.01384721 -0.0003070371 -0.00886117  0.007757524
[4,]  0.03142440  0.0282722871 -0.01541411 -0.024126340# 逆矩阵的性质,逆矩阵与原矩阵进行矩阵乘法,得到对角矩阵。
> round(solve(m0) %*% m0)  # 对角矩阵
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

广义逆矩阵,将逆矩阵的概率推广到奇异矩阵和长方形矩阵上,就产生了广义逆矩阵。

# 创建奇异矩阵

用 ginv 函数计算非奇异矩阵,和 solve() 函数比较。

# 非奇异矩阵

逆矩阵的特性。

16,

3.3  特征值和特征向量

# 创建一个方阵

当 symmetric=TRUE 时,计算对称矩阵的特征值和特征向量,当 m0 不是对称矩阵时,则取下三角对称结构进行计算。

TRUE)

4. 矩阵分解

下面将介绍 4 种矩阵常用的分解的方法,包括三角分解 LU,choleskey 分解,QR 分解,奇异值分解 SVD。

4.1 三角分解 LU

三角分解法是将原方阵分解成一个上三角形矩阵和一个下三角形矩阵,这样的分解法又称为 LU 分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求逆矩阵,和求解联立方程组。这种分解法所得到的上下三角形矩阵不唯一,一对上三角形矩阵和下三角形矩阵,矩阵相乘会得到原矩阵。

# 创建一个矩阵

4.2 choleskey 分解

Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解。它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的。Cholesky 分解法又称平方根法,是当A为实对称正定矩阵时,LU 三角分解法的变形。

# 创建对称方阵

4.3 QR 分解

QR 分解法是将矩阵分解成一个正规正交矩阵与上三角形矩阵,所以称为 QR 分解法,与此正规正交矩阵的通用符号 Q 有关。

# 创建对称方阵

4.4 奇异值分解 SVD

奇异值分解 (singular value decomposition, SVD) 是一种正交矩阵分解法。SVD 是最可靠的分解法,但是它比 QR  分解法要花上近十倍的计算时间。[U,S,V]=svd(A),其中 U 和 V 分别代表两个正交矩阵,而 S 代表一对角矩阵。和 QR 分解法相同, 原矩阵 A 不必为正方矩阵。使用 SVD 分解法的用途是解最小平方误差法和数据压缩。

# 创建对称方阵

5. 特殊矩阵

下面介绍的多种特殊矩阵,都是在 matrixcalc 库中提供的。

5.1 Hankel Matrix

汉克尔矩阵 (Hankel Matrix) 是具有恒定倾斜对角线的方形矩阵。Hankel 矩阵的行列式称为 catalecticant。该函数根据 n 向量 x 的值构造 n 阶 Hankel 矩阵。矩阵的每一行是前一行中值的循环移位。
矩阵定义:


6, 

5.2 Hilbert Matrix

希尔伯特矩阵是一种数学变换矩阵,正定,且高度病态(即,任何一个元素发生一点变动,整个矩阵的行列式的值和逆矩阵都会发生巨大变化),病态程度和阶数相关。希尔伯特矩阵是一种特殊的汉克尔矩阵,该函数返回 n 乘 n 希尔伯特矩阵。
矩阵定义:


4)

5.3 Creation Matrix

创造矩阵,n 阶创建矩阵也称为推导矩阵,该函数返回阶数 n 创建矩阵,在主对角线下方的子对角线上具有序列 1,2,…,n-1 的方阵。
矩阵定义:


5)  

5.4 Stirling Matrix

斯特林公式(Stirling’s approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当 n 很大的时候,n 阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在 n 很小的时候,斯特林公式的取值已经十分准确。
斯特林矩阵(Stirling Matrix),该函数构造并返回斯特林矩阵,该矩阵是包含第二类斯特林数的下三角矩阵。
矩阵定义:


4)

5.5 Pascal matrix

帕斯卡矩阵:由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。此函数返回 n 乘以 Pascal 矩阵。在数学中,尤其是矩阵理论和组合学,Pascal 矩阵是一个下三角矩阵,行中有二项式系数。通过对相同顺序的对称 Pascal 矩阵执行 LU 分解并返回下三角矩阵,可以容易地获得它。
帕斯卡的三角形是由数字行组成的三角形。第一行具有条目1.每个后续行通过添加前一行的相邻条目而形成,替换为 0,其中不存在相邻条目。pascal 函数通过选择与指定矩阵维度相对应的 Pascal 三角形部分来形成 Pascal 矩阵。
矩阵定义:


4)

5.6 Fibonacci matrix

斐波纳契矩阵,该函数构造了从 Fibonacci 序列导出的 n + 1 平方 Fibonacci 矩阵。
计算公式:


4)

5.7 Frobenius Matrix

Frobenius 矩阵也称为伴随矩阵,它出现在线性一阶微分方程组的解中。此函数返回一个在数值数学中有用的 Fronenius 矩阵。
矩阵定义:


4)

5.8 Duplication matrix

复制矩阵,当 A 是对称矩阵时,该函数构造将 vech(A)映射到 vec(A)的线性变换 D。
计算公式:


3) 

5.9 K matrix

k 矩阵是由 H.matrices() 函数构造的,利用直积进行计算子列表的分量。K.matrix(r, c=r) ,返回阶数为 p=r*c  的方阵,对于 r 行 c 列的矩阵 A,计算 A 和 t(A) 的直积。
计算公式:


2,

5.10 E Matrices

E 矩阵列表, E.matrices(n) 使得每个子列表的分量,是从 n 阶单位矩阵计算向量的外积导出的方阵。
计算公式:


3)

5.11 H Matrices

H 矩阵列表, H.matrices(r, c=r) 使得 r 阶 c 阶的子列表的分量,计算从 r 行和 c 列的单位矩阵的列向量的外积导出的方阵。

2,

5.12 T Matrices

T 矩阵列表, T.matrices(n) 高级别列表中的组件数为 n。n 个组件中的每一个也是列表。每个子列表具有 n 个分量,每个分量是 n 阶矩阵。
计算公式:


3)

通过 R 语言,我们实现了对于矩阵的各种计算操作,非常方便!有了好的工具,不管是学习还是应用,都会事半功倍。本文只是列举了矩阵的操作方法,没有解释计算的推到过程,推到过程请参考线性代码的教科书。

—END—

R语言中dim函数_R 语言中的矩阵计算相关推荐

  1. R语言中dim函数_R语言中的方差分析方法汇总

    方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...

  2. R语言中dim函数_R语言--向量化计算(apply族函数)

    R语言最优秀的是它的向量化编程,这其中apply族函数扮演了非常重要的角色.apply族函数是由apply.sapply.lapply.mapply.tapply等函数组成的.熟练使用apply族函数 ...

  3. R语言中dim函数_R语言 常见函数知识点梳理与解析 | 精选分析

    目 录 1.str() 显示数据集和变量类型,并简要展示数据集情况 2.subset()  取子集 3.which.min(), which.max()和which() 4.pmin( )/ pmax ...

  4. r语言中paste函数_R中的paste()函数-简要指南

    r语言中paste函数 Using the paste() function in R will be straight and simple. In this tutorial let's see ...

  5. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  6. r语言中mpg数据_R语言数据实战 | 统计检验

    原标题:R语言数据实战 | 统计检验 1.单个总体均值的t检验 1. 什么是检验? 检验(test)是统计学中最重要的概念之一,在科学研究和实际业务中都有着广泛的应用.用一句话来概括就是:人们希望通过 ...

  7. r语言中mpg数据_R语言常用的数据处理的包(1)

    在R中有很多的内置函数,比如transform().rbind().cbind()等函数,这些函数我们可以直接使用,除此之外,还有常见的几种包在处理数据的时候非常好用. dplyr包 dplyr包是H ...

  8. r语言中mpg数据_R语言数据分析系列之五

    R语言数据分析系列之五 本节来讨论一下R语言的基本图形展示,先来看一张效果图吧. 这是一张用R语言生成的,虚拟的wordcloud云图,详细实现细节请參见我的github项目:https://gith ...

  9. c语言中bluetooth函数,C语言中的低功耗蓝牙-使用Bluez创建GATT服务器

    小编典典 我得到了运行BlueZ 5.31的示例GATT服务器(截至本文的最新信息): 我的环境: 作为来宾OS(版本14.04 32位操作系统)的 Vagrant Virtual Box Ubunt ...

  10. r语言中c函数错误,R语言中c()函数与paste()函数的区别说明

    c()函数:将括号中的元素连接起来,并不创建向量 paste()函数:连接括号中的元素 例如 c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为"1 2" ...

最新文章

  1. 《LeetCode力扣练习》第461题 汉明距离 Java
  2. python3 with中异常的问题
  3. Java 11将于本月25日发布,新特性一览
  4. leetcode算法题--1~n整数中1出现的次数
  5. QML基础类型之geopath
  6. Spring MVC和REST中@RestController和@Controller注释之间的区别
  7. 90-20-010-源码-调试-Kylin-2.6.0源码调试
  8. [BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】
  9. TensorFlow tf.squeeze
  10. [转]iOS设备唯一标识探讨
  11. Java 递归求后一个数是前两个数之和
  12. ASP.NET Core真实管道详解[1]:中间件是个什么东西?
  13. Beyond Compare设置文本文件和Delphi源码默认的打开格式为ANSI
  14. 考研计算机网络必考考点,计算机专业考研计算机网络考点汇总
  15. 数据挖掘技术基本任务
  16. 第24期、宠物医院管理系统
  17. python处理时间格式转换,将xxxx年xx月xx日转化为xxxx-xx-xx格式
  18. 腾讯云服务器架设mir2
  19. iFunk翼S苏宁京东热卖进行中
  20. 【我喜欢你,像风走了八千里】-末那大叔

热门文章

  1. cocos ClippingNode 之绘制六边形战力(一)
  2. 利用PIN码破解wifi密码(WPA2-PSK)
  3. codeforces 909 f
  4. 除了方文山,用TA你也能帮周杰伦写歌词了
  5. 【转载】GitHub中国区前100名到底是什么样的人
  6. Spring Boot (Vue3+ElementPlus+Axios+MyBatisPlus +Spring Boot 前后端分离)
  7. Can‘t locate XXX/XXX.pm in @INC (you may need to install the XXX::XXX module)
  8. Android 11 状态栏电池图标的定制
  9. 电脑突然蓝屏要怎么办?电脑为啥会蓝屏?
  10. 如何修改echarts源码(其他框架也可适用)