首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >涉及逆矩阵的稀疏矩阵乘法

涉及逆矩阵的稀疏矩阵乘法
EN

Stack Overflow用户
提问于 2012-08-02 03:49:22
回答 1查看 515关注 0票数 0

我有两个大型的正方形稀疏矩阵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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 08:20:33

实际上,1000x1000矩阵并没有那么大。在现代的台式计算机上,您可以使用numpy.linalg.inv(B)在不到1秒的时间内计算这样一个矩阵的逆矩阵。

但是,如果你重写你的问题,考虑到你只需要C的一行(实际上经常是这种情况),你会更有效率。

让我们写d_i =0 0 0 ... 0 1 0 ... 0,一个在第i个元素上只有一个的向量。你可以这样写,如果^t表示转置:

代码语言:javascript
运行
AI代码解释
复制
AB^-1 = C <=> A = CB <=> A^t = B^t C^t

对于第i行:

代码语言:javascript
运行
AI代码解释
复制
A^t d_i = B^t C^t d_i <=> a_i = B^t c_i

所以你有一个可以用numpy.linalg.solve解决的线性反问题

代码语言:javascript
运行
AI代码解释
复制
ci = np.linalg.solve(B.T, a[i])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11770795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档