我对矩阵不是很好,而且我大部分时间都不知道自己在做什么,因为我正在尝试修复别人的代码。
有问题的代码是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)。
答案 0 :(得分:0)
1)你的意思是“似乎并不总是有效”? bicg
info!=0
失败了吗?这并不奇怪,因为A
不可逆,所以可能会发生这种情况。输入,特别是矩阵A
可能是错误的吗?
2)spsolve
在同一情况下bicg
失败了吗?
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是错误的