Python vs Matlab - 为什么我的矩阵在 python 中是奇异的

2023-12-21

我正在尝试将一些算法从 Matlab 转换为 Python 3.8。在算法中,我试图反转一些矩阵,结果是Matlab按照它应该做的那样反转矩阵,但Python(使用numpy.linalg)说它不能反转奇异矩阵。 经过一番调试,我们发现在Matlab中矩阵的行列式是5.79913020654461e-35,但在python中却是0。 多谢!

我使用Python 3.8和numpy版本1.20.0和Matlab 2017a

这是数据:

我的矩阵:

[[3.0322662511118286, 3.645196880210743, 1.3326781661192055, -4.925254309001175],
[3.645196880210743, 4.382022947889959, 1.6020606012651588, -5.920826258432845],
[1.3326781661192055, 1.6020606012651588, 0.5857108009982133, -2.164644637608797],
[-4.925254309001175, -5.920826258432845, -2.164644637608797, 8.]]

我的Python脚本:

import numpy as np

np.set_printoptions(20)  # Matrix dtype is float 64, meaning that there will be up to 15 digits after decimal point
matrix = np.array([[3.0322662511118286, 3.645196880210743, 1.3326781661192055, -4.925254309001175],
                   [3.645196880210743, 4.382022947889959, 1.6020606012651588, -5.920826258432845],
                   [1.3326781661192055, 1.6020606012651588, 0.5857108009982133, -2.164644637608797],
                   [-4.925254309001175, -5.920826258432845, -2.164644637608797, 8.]])
print(f"Matrix is: {matrix}")
print(f"dtype is: {matrix.dtype}")
print(f"Matrix det is: {np.linalg.det(matrix)}")
try:
    print(f"Inverse matrix is: {np.linalg.inv(matrix)}")
except np.linalg.LinAlgError as e:
    print(f"Failed to inverse matrix. Error code: '{e}")

Python 脚本的输出:

Matrix is: [[ 3.0322662511118286  3.645196880210743   1.3326781661192055
  -4.925254309001175 ]
 [ 3.645196880210743   4.382022947889959   1.6020606012651588
  -5.920826258432845 ]
 [ 1.3326781661192055  1.6020606012651588  0.5857108009982133
  -2.164644637608797 ]
 [-4.925254309001175  -5.920826258432845  -2.164644637608797
   8.                ]]
dtype is: float64
Matrix det is: 0.0
Failed to inverse matrix. Error code: 'Singular matrix

Matlab脚本+输出:

>> format longg
>> matrix = 
3.0322662511118286      3.645196880210743       1.3326781661192055      -4.925254309001175
3.645196880210743       4.382022947889959       1.6020606012651588      -5.920826258432845
1.3326781661192055      1.6020606012651588      .5857108009982133       -2.164644637608797
-4.925254309001175      -5.920826258432845      -2.164644637608797      8.
>> det (matrix)
ans = 5.79913020654461e-35
>> inv (matrix)
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.480881e-17.
ans =
463831092542248     557587200641207     203852870968935     753391506264877
557587200641207     670315847520521     245068621497740     905696113927055
203852870968935     245068621497740     89607103131709.8    331125436963685
753391506264877     905696113927055     331125436963685     1.2237353746994e+15

已经尝试使用其他数据类型但没有成功


MATLAB 和 Python 都告诉你逆矩阵是垃圾。那么你为什么要尝试计算它呢?您会在代码的下游使用这个垃圾结果做什么?你需要重新思考你在做什么bothMATLAB 和 Python 都是这样,因为现在两者都没有意义。下面显示,即使 MATLAB 为您提供了它所能提供的最佳答案,您也应该注意 MATLAB 认为答案是垃圾的警告,因为它确实是垃圾。原始矩阵的倒数与单位矩阵不太接近。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python vs Matlab - 为什么我的矩阵在 python 中是奇异的 的相关文章

随机推荐

  • 未找到类型的构造函数

    异常消息 Constructor on type StateLog not found 我有以下代码 该代码仅适用于一个类 List
  • 操作错误,没有这样的列。姜戈

    我正在浏览位于以下位置的 Django REST 框架教程 http www django rest framework org http www django rest framework org 我快完成了 刚刚添加了身份验证 现在我得
  • Monte Carlo pi 近似的并行化

    我正在编写一个 C 脚本来与 OpenMp 并行化 pi 近似 我认为我的代码运行良好 输出令人信服 我现在用 4 个线程运行它 我不确定的是 这段代码是否容易受到竞争条件的影响 如果是 我如何协调这段代码中的线程操作 代码如下 inclu
  • 在 iTextSharp 中的两个表格之间添加空格

    正如标题所示 我正在使用 iTextSharp 生成报告 我想在两个表之间添加一个空格 但我不知道如何做 这是我的代码 var boldFont FontFactory GetFont FontFactory HELVETICA BOLD
  • 将字符串转换为 JSON 数组

    我有来自 Web 服务的以下 JSON 字符串 并尝试将其转换为JSONarray locations lat 23 053 long 72 629 location ABC address DEF city Ahmedabad state
  • Firefox JavaScript chrome 代码中的弱引用

    假设我正在写一个类A 在我基于 Jetpack 的库中 即我们正在讨论 chrome 扩展代码 function A constructor A prototype class members 用户创建类的实例A var a new A 现
  • 如何将列数据转入不能超过最大数量总数的行?

    介绍 我遇到了意想不到的挑战 我希望有人可以提供帮助 并且我对根据这个问题操作数据的最佳方法感兴趣 设想 我需要合并与两个不同 ID 列关联的列数据 我的每一行都关联一个 item id 和该 item id 的数量 请参阅下面的示例 cu
  • 在没有互联网的情况下连接 WIFI 时,可达性需要太长时间才能失败

    你好呀 我一直在使用可达性类 一切正常 除了 当设备连接到 wifi 时 无论出于何种原因 wifi 路由器没有互联网连接 可达性等级需要很长时间才能表明没有互联网 当根本没有网络 互联网连接时 它工作得很好 很快 例如 如果 wifi 关
  • 数据库错误没有这样的表django

    我在 django 项目 cc 中创建了一个新应用程序 api 我有一个远程数据库 launchg 我使用 Legacies 将其与 Django 集成并使用python manage py inspectdb gt models py生成
  • Javascript 图像对象 - 处理 onload 事件

    我正在尝试在点击事件上预加载图像 new image object var imgObject new Image assign the path to the image to the src property imgObject src
  • 如何在 vuejs 中导入并使用本地 .csv 文件

    我在这个结构中有一个 csv 文件 name year href src Parasite 2019 parasite 2019 film poster 4 2 6 4 0 6 426406 parasite 0 460 0 690 cro
  • 使用 LIKE 表达式时 SQLite 中的土耳其语字符

    select from urunler where musteri like ir 测试数据 musteri ID rem 1 Kadir 2 Demir 3 返回结果 Kadir Demir if use r 然后伊雷姆回来了 但卡迪尔和
  • 如何在SDL2中旋转矩形?

    我计划制作一个游戏 并且我想为该游戏创建一些背景动画 这些动画之一是旋转矩形 我已经查看了所有内容 但找不到任何形式的数学或逻辑可以让我旋转矩形 具体来说是 SDL Rect 但您可能已经知道了 我自己无法计算出数学公式 我真的没有任何可用
  • 将所有远程 git 分支作为本地分支进行跟踪

    将单个远程分支作为本地分支进行跟踪非常简单 git checkout track b branch name origin branch name 将所有本地分支推送到远程 根据需要创建新的远程分支也很容易 git push all ori
  • 如何保守应用程序的秘密?

    每个新的 Play 应用程序都会在其配置文件中生成一个新的应用程序密钥 application secret asdfadsfdasf 我正在开发一个将部署在 Heroku 上的开源应用程序 如何保守应用程序的秘密 例如 不将其提交到源代码
  • Constexpr 用于创建对象

    我试图弄清楚使用以下命令创建对象是否会带来性能提升constexpr而不是正常情况下 这是代码片段constexpr class Rect const int a const float b public constexpr Rect co
  • TFS Online - 从 0 开始 $(Rev.r)

    我在内部版本号中使用 Rev r 主要 次要 修订版 r 这非常有效 并且在每次构建时都会递增 并且如果主要或次要版本发生更改 则会重置 但编号从 1 开始 而不是 0 所以第一个版本不是 1 0 0 而是 1 0 1 这并不是我真正想要的
  • Visual Studio 2010可以自动将编译后的文件复制到另一个目录吗?

    我有两个项目 一个是编译为 EXE 的 VB6 项目 另一个是编译为 DLL 的 MSVC 2010 项目 DLL 需要与 EXE 文件位于同一文件夹中才能工作 我可以让 Visual Studio 2010 在编译后自动将编译后的 DLL
  • 打字稿不创建 dist 文件夹

    尝试编写打字稿项目 这是我的项目结构 rootdir src server ts other folders node modules tsconfig json package json tsconfig json compilerOpt
  • Python vs Matlab - 为什么我的矩阵在 python 中是奇异的

    我正在尝试将一些算法从 Matlab 转换为 Python 3 8 在算法中 我试图反转一些矩阵 结果是Matlab按照它应该做的那样反转矩阵 但Python 使用numpy linalg 说它不能反转奇异矩阵 经过一番调试 我们发现在Ma