Python:scipy.spsolve崩溃没有错误

时间:2012-08-29 08:03:55

标签: python opencv matrix numpy scipy

我对矩阵不是很好,而且我大部分时间都不知道自己在做什么,因为我正在尝试修复别人的代码。

有问题的代码是new_vals = scipy.sparse.linalg.spsolve(A,b),其中A是具有以下维度的稀疏矩阵:(1146880,1146880),b是(1146880,1)。当python崩溃时,没有错误,我很确定它没有内存不足。有些搜索建议它是堆栈溢出的一种形式,所以我尝试使用bicg来制定不同的解决方案,但new_vals,check = scipy.sparse.linalg.bicg(A,b)似乎并不总是有用。

他们是否有办法让spsolve工作?还是有另一种方法可以做到这一点吗?

编辑:我之前曾声明两个矩阵的大小相同,但b为(1146880,1)。

1 个答案:

答案 0 :(得分:0)

1)你的意思是“似乎并不总是有效”? bicg info!=0失败了吗?这并不奇怪,因为A不可逆,所以可能会发生这种情况。输入,特别是矩阵A可能是错误的吗?

2)spsolve在同一情况下bicg失败了吗?

编辑:在回复评论时,我不相信spsolve。这是一个失败的例子:

import scipy.sparse
import scipy.sparse.linalg

A=scipy.sparse.csc_matrix(linspace(1,15,16).reshape((4,4)))
b=ones((4))
res_spsolve=scipy.sparse.linalg.spsolve(A,b)
res_bicg,info=scipy.sparse.linalg.bicg(A,b)


b_bicg = A*res_bicg
b_spsolve = A*res_spsolve

你会看到b_spsolve是错误的