numpy.linalg.inv返回奇异矩阵的逆函数 - python

下面的矩阵是单数,并且AFAIK尝试将其求反应导致

numpy.linalg.linalg.LinAlgError: Singular matrix

但是我得到了一些输出矩阵。请注意,输出矩阵是无意义的结果,因为它具有一行0(这是不可能的,因为矩阵的逆本身应该是可逆的)!

我是否在这里缺少与浮点精度有关的东西,或者与真实逆相反的伪逆的计算?

$ np.__version__ 
'1.13.1'
$ np.linalg.inv(np.array([[2,7,7],[7,7,7],[8,7,7]]))
array([[  0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  3.43131400e+15,  -2.05878840e+16,   1.71565700e+16],
       [ -3.43131400e+15,   2.05878840e+16,  -1.71565700e+16]])```

参考方案

在后台,NumPy和SciPy(以及许多其他软件)都退回到线性方程求解器的LAPACK实现(或C转换)(在本例中为GESV)。

由于GESV首先执行LU分解,然后检查U矩阵的对角线是否有确切的零,因此很难在分解中达到理想的零。这就是为什么您不会遇到奇异矩阵错误的原因。

除此之外,如果要与其他矩阵相乘,则永远不要求逆矩阵,而是求解AX=B

在SciPy自版本0.19起,scipy.linalg.solve使用GESVX的“专家”驱动程序GESV,该驱动程序还会报告条件编号并发出警告。如果缺少奇点,这类似于matlab的行为。

In [7]: sp.linalg.solve(np.array([[2,7,7],[7,7,7],[8,7,7]]), np.eye(3))
...\lib\site-packages\scipy\linalg\basic.py:223: RuntimeWarning: scipy.linalg.solve
Ill-conditioned matrix detected. Result is not guaranteed to be accurate.
Reciprocal condition number: 1.1564823173178713e-18
  ' condition number: {}'.format(rcond), RuntimeWarning)
Out[7]: 
array([[  0.00000000e+00,  -1.00000000e+00,   1.50000000e+00],
       [  3.43131400e+15,  -2.05878840e+16,   1.71565700e+16],
       [ -3.43131400e+15,   2.05878840e+16,  -1.71565700e+16]])

numpy.savetxt“元组索引超出范围”? - python

我试图在文本文件中写几行,这是我使用的代码:import numpy as np # Generate some test data data = np.arange(0.0,1000.0,50.0) with file('test.txt', 'w') as outfile: outfile.write('…

用Python计算稀疏矩阵的Cholesky分解 - python

我正在尝试实现Reinsch's Algorithm(pp 4)。由于工作矩阵是稀疏的,所以我使用的是scipy.sparse模块,但是正如您所看到的,Reinsch的算法需要稀疏矩阵的Cholesky分解(我们称其为my_matrix)才能求解某些系统,但是我不能找到与此有关的任何东西。当然,在同一算法中,我可以使用scipy.sparse.li…

numpy loadtxt单行/行作为列表 - python

我只有一个数据文件,例如: 1.2 2.1 3.2 我使用numpy版本1.3.0 loadtxt加载它 a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True) 输出是浮点数而不是数组 a = 1.2 我希望它将是: a = array([1.2]) 如果我读取了多行文件,则该文件…

设置Jupyter笔记本电脑的最大内核数 - python

我与同事共享一台计算机。他们在那里运行并行计算,我需要运行Jupyter。我可能只使用几个核心,而不是全部。但是,每次运行在Jupyter中使用numpy的单元时,它都会尝试使用尽可能多的内核。在运行同事的计算时,Python占用了一半的内核。我试图将Jupyter进程的nice设置为19,以便其Python子进程继承niceness值,并且不尝试使用所有内…

Python输出numpy数组作为base64编码的字符串而不是jpg - python

我有一个简单的Python3脚本,它使用以下命令从numpy数组创建图像...cv2.imwrite("finalImage.jpg", numpyArray) 这可以正常工作,但是现在我希望输出的是base64编码的字符串,而不是jpg图像。我知道我可以将输出的jpg图像转换为base64字符串,但是有一种方法可以直接执行此操作,因此我…