那个scipy.linalg.lu()为什么不返回与scipy.sparse.linalg.splu()相同的L矩阵? - python

我有以下代码,其中我使用命令scipy.linalg.lu()计算给定方阵的L矩阵,然后再次执行相同的操作,只是随后使用scipy应用于给定矩阵的稀疏形式。 sparse.linalg.splu()。这是代码:

import numpy as np
from scipy.sparse.linalg import splu
from scipy.sparse import csc_matrix
import scipy.linalg
A1 = csc_matrix([[1., 0, 0.], [5., 0, 2], [0, -1., 0]])
A2 = np.array([[1., 0, 0.], [5., 0, 2], [0, -1., 0]])
B = splu(A1)
P,L,U = scipy.linalg.lu(A2)
print(L);print(csr_matrix.todense(B.L))

返回以下内容:

[[ 1.   0.   0. ]
 [ 0.   1.   0. ]
 [ 0.2 -0.   1. ]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

我们可以看到,这些矩阵并不相同。我是误解了这两个命令的作用还是其他地方出了问题?任何帮助表示赞赏。谢谢!

参考方案

我认为这里的答案是稀疏矩阵的“ SuperLU”分解需要对行和列进行排列(请参见the docs):

Pr * A * Pc = L * U

这些由perm_rperm_c属性中的索引映射提供。所以,

Pr = csc_matrix((3,3))
Pr[B.perm_r, np.arange(3)] = 1
Pc = csc_matrix((3,3))
Pc[np.arange(3), B.perm_c] = 1

(Pr.T @ B.U @ B.L @ Pc.T).A

根据需要给出:

array([[ 1.,  0.,  0.],
       [ 5.,  0.,  2.],
       [ 0., -1.,  0.]])

与非稀疏结果相同,后者仅需要排列L矩阵P @ L @ U

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

下面的矩阵是单数,并且AFAIK尝试将其求反应导致numpy.linalg.linalg.LinAlgError: Singular matrix 但是我得到了一些输出矩阵。请注意,输出矩阵是无意义的结果,因为它具有一行0(这是不可能的,因为矩阵的逆本身应该是可逆的)!我是否在这里缺少与浮点精度有关的东西,或者与真实逆相反的伪逆的计算?$ np.__vers…

使用scipy的各种稀疏矩阵产品的性能 - python

我有一个术语文档矩阵作为稀疏矩阵(csr或coo矩阵),还有一个特征向量,我想对其进行相似度比较。我想尝试以下方法:1.)使用doc矩阵作为csr矩阵,将其转换为ndarray,然后在行上进行迭代,并使用scikit进行余弦模拟,以了解ndarray之间的余弦相似度。2)将doc矩阵作为csr矩阵,将其转换为ndarray,然后将该矩阵与向量进行乘积运算,除…

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

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

Scipy稀疏矩阵在余弦相似度方面的存储效率不高 - python

我正在尝试使用scipy稀疏矩阵实现余弦相似度,因为我在使用普通矩阵(非稀疏)时遇到内存错误。但是,我注意到稀疏和非稀疏矩阵的余弦相似度的内存大小(以字节为单位)在输入矩阵(观测值)的大小较大时几乎相同。我是在做错什么,还是有办法解决?这是输入的代码,其中5%为1,95%为0。import numpy as np from sklearn.metrics.p…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…