用Python求矩阵的广义逆

这篇具有很好参考价值的文章主要介绍了用Python求矩阵的广义逆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于两个方阵 A , B A,B A,B,若 A B = E AB=E AB=E,且 E E E为单位阵,则 A , B A,B A,B互逆,可记作 A = B − 1 , B = A − 1 A=B^{-1}, B=A^{-1} A=B1,B=A1

inv

numpyscipy中,均提供了求逆函数,分别是numpy.linalg.invscipy.lingalg.inv,下面举个例子看一下

import numpy as np
import numpy.linalg as nl
import scipy.linalg as sl

A = np.random.rand(3,3)

二者求逆的结果如下,是完全相同的

>>> nl.inv(A)
array([[  0.56940181,   7.07580181,  -2.80811204],
       [ -0.4241864 ,  -0.45826635,   1.51146259],
       [  1.80687147, -13.30035928,   2.91842045]])
>>> sl.inv(A)
array([[  0.56940181,   7.07580181,  -2.80811204],
       [ -0.4241864 ,  -0.45826635,   1.51146259],
       [  1.80687147, -13.30035928,   2.91842045]])

下面测试以下二者的计算时间

from timeit import timeit
A = np.random.rand(500,500)
timeit(lambda : nl.inv(A), number=100)
# 2.689510200000001
timeit(lambda : sl.inv(A), number=100)
# 0.5326764000000139

可见scipy.linalg.inv要比numpy更快。

穆尔-彭罗斯广义逆

有了逆这个概念,那么对于求解 A x = b Ax=b Ax=b这样的方程组就变得简单了, x x x可写为 x = A − 1 b x=A^{-1}b x=A1b

但并不是所有矩阵都有逆的,为了让 x = A − 1 b x=A^{-1}b x=A1b这种形式拥有更广的适用范围,就必须拓展矩阵的逆的概念,此即广义逆。

对于复矩阵 A A A而言,若存在复矩阵 G G G,满足

  1. A G A = A AGA=A AGA=A
  2. G A G = G GAG=G GAG=G
  3. ( A G ) H = A G (AG)^H=AG (AG)H=AG
  4. ( G A ) H = G A (GA)^H=GA (GA)H=GA

其中 ∗ H *^H H表示共轭转置,则称 G G G A A A的穆尔-彭罗斯广义逆,也叫加号逆,记作 G = A + G=A^+ G=A+

scipy.linalg提供了两个求加号逆的矩阵,分别是pinvpinvh,分别用于实矩阵和复矩阵。

pinv

inv中,除了待求矩阵a之外,还有两个参数:overwrite_a默认为False,若为True,则在计算过程中覆盖acheck_finite默认False,若为True则进行有限性检查。

pinv, pinvh中,除了acheck_finite之外,还有下列参数:

  • atol, rtol 用于控制精度
  • return_rank 若为True,则返回矩阵的有效秩

下面以pinv为例,简单介绍一下函数的使用方法。

A = np.random.rand(3,4)
# sl.inv(A)会报错
G = sl.pinv(A)

随机生成的A为矩阵

[ 0.06135389 0.53545499 0.52057907 0.48222946 0.65828574 0.42574002 0.09521576 0.62040737 0.86266928 0.51081037 0.11678121 0.74462639 ] \begin{bmatrix} 0.06135389&0.53545499&0.52057907&0.48222946\\ 0.65828574&0.42574002&0.09521576&0.62040737\\ 0.86266928&0.51081037&0.11678121&0.74462639 \end{bmatrix} 0.061353890.658285740.862669280.535454990.425740020.510810370.520579070.095215760.116781210.482229460.620407370.74462639

接下来看一下 A A A A G A AGA AGA是否相等

>>> A@G@A

其结果仍为矩阵

[ 0.06135389 0.53545499 0.52057907 0.48222946 0.65828574 0.42574002 0.09521576 0.62040737 0.86266928 0.51081037 0.11678121 0.74462639 ] \begin{bmatrix} 0.06135389&0.53545499&0.52057907&0.48222946\\ 0.65828574&0.42574002&0.09521576&0.62040737\\ 0.86266928&0.51081037&0.11678121&0.74462639 \end{bmatrix} 0.061353890.658285740.862669280.535454990.425740020.510810370.520579070.095215760.116781210.482229460.620407370.74462639

可见二者是相等的。文章来源地址https://www.toymoban.com/news/detail-693133.html

到了这里,关于用Python求矩阵的广义逆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】科学计算库Scipy简易入门

    Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。 Scipy是由针对特定任务的子模块组成: 模块名 应用领域 scipy.cluster

    2024年02月06日
    浏览(48)
  • Python Scipy 自定义任意的概率分布

    Scipy自带了多种常见的分布,如正态分布、均匀分布、二项分布、多项分布、伽马分布等等 1 ,还可以自定义任意的概率分布。本文将介绍如何利用Scipy自定义任意的概率分布。 考虑连续变量 x 满足如下概率密度分布函数: 其在实数域积分为1。我们可以通过scipy.stats中的rv_co

    2024年02月16日
    浏览(36)
  • 【scipy】Python调用非线性最小二乘法

    在scipy中,非线性最小二乘法的目的是找到一组函数,使得误差函数的平方和最小,可以表示为如下公式 arg min ⁡ f i F ( x ) = 0.5 ∑ i = 0 m − 1 ρ ( f i ( x ) 2 ) , x ∈ [ L , R ] argmin_{f_i} F(x) = 0.5sum_{i=0}^{m-1}rho(f_i(x)^2),quad xin[L,R] f i ​ arg min ​ F ( x ) = 0.5 i = 0 ∑ m − 1 ​ ρ ( f i

    2024年02月09日
    浏览(38)
  • Anaconda配置Python科学计算库SciPy的方法

      本文介绍在 Anaconda 环境中,安装 Python 语言 SciPy 模块的方法。    SciPy 是基于 Python 的科学计算库,用于解决科学、工程和技术计算中的各种问题。它建立在 NumPy 库的基础之上,提供了大量高效、易于使用的功能,包括统计分析、信号处理、优化、线性代数、图像处理

    2024年02月02日
    浏览(39)
  • 基于python/scipy学习概率统计(3):正态分布

    目录 1. 前言 2. 概率密度函数(PDF: Probability Density Function)¶ 3. 累积分布函数(CDF: Cumulative Distribution Function) 4. 百分点函数(PPF: Percent Point Function) 5. 生成函数和风险函数 6. 常用统计特征 7. 应用示例 7.1 从正态分布中采样 7.2 The 68-95-99.7 Rule 8. Why is the normal distribution useful and importan

    2023年04月08日
    浏览(89)
  • python scipy.optimize.minimize多变量多参数优化

    自己在用python求解多变量带多超参数输入的最小化问题时,遇到一些问题,在网上找了一下发现也没有特别详细的教程,自己试错之后整理了下minimize的使用说明。话不多说,直接上代码。 y为优化目标函数,x为待优化的变量。优化前给定x的初始值x_ini,因为现在只有一个待

    2024年02月12日
    浏览(39)
  • 深入探索Python的scipy库:强大的科学计算工具集(学scipy看这一篇文章就够了)

    引言: Python是一种功能强大且受欢迎的编程语言,广泛应用于科学计算、数据分析和工程应用领域。在Python生态系统中,scipy库是一个重要的工具,提供了许多用于科学计算的高级功能。本文将深入探索scipy库,介绍其主要功能和用法,并提供相应的代码示例和相关资源。 一、

    2024年02月09日
    浏览(56)
  • 基于python/scipy学习概率统计(1):均匀分布(Uniform Distribution)

    目录 1. 前言 2. 均匀分布 Uniform Distribution 2.1 统计特征 2.2 概率密度函数 2.3 随机采样实验 2.4 其它常用函数         本系列借助scipy.stats模块对机器学习中常用的概率统计基础知识进行基于实验的学习。         这第一篇先从最简单的均匀分布(uniform distribution)。     

    2023年04月14日
    浏览(36)
  • 版本匹配指南:Scipy版本、Python版本和Numpy版本的对应关系

    版本匹配指南:Scipy版本、Python版本和Numpy版本的对应关系 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度

    2024年03月26日
    浏览(55)
  • 奇异矩阵与非奇异矩阵(广义逆)

    最近看了一篇多视图聚类的论文,论文代码使用matlab,在matlab中求矩阵的逆是使用了广义的逆pinv,对此很疑惑,整理资料供自己查阅。 奇异矩阵 奇异矩阵的概念源于线性代数,就是对应行列式为0的方阵。 非奇异矩阵 对应行列式非零的方阵为非奇异矩阵。 判断方法 首先看

    2023年04月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包