我有两个大型的正方形稀疏矩阵A和B,并且需要计算以下内容:以最有效的方式计算A * B^-1
。我有一种感觉,答案是使用scipy.sparse
,但我无论如何也想不出来。
经过广泛的搜索,我遇到了以下线程:Efficient numpy / lapack routine for product of inverse and sparse matrix?,但找不到最有效的方法。
有人建议使用LU分解,它内置在scipy的稀疏模块中,但当我尝试对样本矩阵进行LU分解时,结果是奇异的(尽管当我只做* B^-1时,我得到了答案)。我也听到有人建议使用linalg.spsolve()
,但我不知道如何实现它,因为它需要一个向量作为第二个参数。
如果它有帮助,一旦我有了解决方案。A * B^-1 = C
,我只需要知道矩阵C的一行的值。矩阵大约是1000x1000到1500x1500。
发布于 2012-08-02 08:20:33
实际上,1000x1000矩阵并没有那么大。在现代的台式计算机上,您可以使用numpy.linalg.inv(B)在不到1秒的时间内计算这样一个矩阵的逆矩阵。
但是,如果你重写你的问题,考虑到你只需要C的一行(实际上经常是这种情况),你会更有效率。
让我们写d_i =0 0 0 ... 0 1 0 ... 0,一个在第i个元素上只有一个的向量。你可以这样写,如果^t表示转置:
AB^-1 = C <=> A = CB <=> A^t = B^t C^t
对于第i行:
A^t d_i = B^t C^t d_i <=> a_i = B^t c_i
所以你有一个可以用numpy.linalg.solve解决的线性反问题
ci = np.linalg.solve(B.T, a[i])
https://stackoverflow.com/questions/11770795
复制相似问题