gpt4 book ai didi

python - Numpy 反转不可逆矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:28 24 4
gpt4 key购买 nike

我和我的 friend 在 Python 2Python 3 中执行了这行代码:

import numpy as np  
mat = np.array([[1,0,0],[-1,3,3],[1,2,2]])
np.linalg.inv(mat)

返回:

array([[  1.00000000e+00,   0.00000000e+00,   0.00000000e+00],
[ 1.50119988e+16, 6.00479950e+15, -9.00719925e+15],
[ -1.50119988e+16, -6.00479950e+15, 9.00719925e+15]])

这是奇怪的:

np.linalg.matrix_rank(mat)

返回 2,因此表明矩阵不可可逆。

我从这个线程了解到这可能是由于 numpy 和 python 处理 float 的方式,尽管我的矩阵由整数组成。

mat 破坏 numpy 的逆向实现是否有特殊原因?

最佳答案

正如 DYZ 指出的那样,矩阵不可逆,因为它的秩是 2 而不是 3。

你得到这样结果的原因是因为 numpy 使用了 LU decomposition来计算倒数。即使在您的矩阵是奇异矩阵的情况下,该算法也可以产生结果。如果您对详细信息感兴趣,请阅读链接的维基百科文章。

请注意,生成的“逆”是不正常的。因此,如果您尝试使用它来求解线性方程组,它很可能会给您带来一堆 NaN 和 Inf。

我猜 numpy 不会检查高性能库常见的结果质量。您可以通过将原始矩阵乘以假定的逆矩阵并检查对角线上的数字是否接近 1 而其他数字是否为零来非常便宜地自己进行此类检查。由于浮点计算的性质,它们不一定完全等于零或一

正如 DSM 指出的 condition number你的矩阵真的很高。

>> cond(A)
ans = 2.4956e+16

因此,由于这种病态矩阵,您失去了 16 位精度。在浮点不精确引起的错误之上。

顺便说一下,正如其他人在上面指出的那样,您的示例在 Numpy 1.12.0 中不起作用

>>> import numpy as np
>>> np.version.version
'1.12.0'

>>> import numpy as np
>>> mat = np.array([[1,0,0],[-1,3,3],[1,2,2]])
>>> np.linalg.inv(mat)
Traceback (most recent call last):
File "/Users/vlad/.pyenv/versions/CourseraDL/lib/python3.4/site-packages/numpy/linalg/linalg.py", line 90, in _raise_linalgerror_singular
raise LinAlgError("Singular matrix")
numpy.linalg.linalg.LinAlgError: Singular matrix
>>>

关于python - Numpy 反转不可逆矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com