首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >矩阵的Python逆

矩阵的Python逆
EN

Stack Overflow用户
提问于 2008-10-17 05:30:50
回答 6查看 124.5K关注 0票数 62

如何在python中求矩阵的逆矩阵?我自己实现了它,但它是纯python,我怀疑有更快的模块可以做到这一点。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-17 05:41:42

如果你做矩阵操作,你应该看看numpy。这是一个主要用C编写的模块,它比用纯python编程要快得多。下面是一个如何反转矩阵以及进行其他矩阵操作的示例。

代码语言:javascript
复制
from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] )                  # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] )                      # Creates a matrix (like a row vector).
print A.T                                    # Transpose of A.
print A*x                                    # Matrix multiplication of A and x.
print A.I                                    # Inverse of A.
print linalg.solve(A, x)     # Solve the linear equation system.

您还可以看看array模块,当您只需要处理一种数据类型时,它是一种更有效的列表实现。

票数 108
EN

Stack Overflow用户

发布于 2008-10-18 20:12:28

确保你真的需要反转矩阵。这通常是不必要的,而且在数值上可能不稳定。当大多数人问如何求矩阵的逆时,他们真的想知道如何求解Ax =b,其中A是矩阵,x和b是向量。使用代码直接求解x的方程Ax = B比计算A逆,然后将逆乘以B更有效、更准确。即使您需要为许多b值求解Ax =b,也不是一个好主意。如果您必须为多个b值求解系统,请保存A的Cholesky分解,但不要反转它。

参见Don't invert that matrix

票数 56
EN

Stack Overflow用户

发布于 2010-06-28 05:19:14

遗憾的是,选择的矩阵,在这里再次重复,要么是单一的,要么是糟糕的条件:

代码语言:javascript
复制
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])

根据定义,当A乘以矩阵A本身时,A的逆矩阵一定是单位矩阵。在备受赞誉的解释中选择的A并没有做到这一点。事实上,只要看一下倒数,就会发现倒数没有正确工作。看看单个项的大小-与原始A矩阵的项相比,它们非常非常大……

值得注意的是,人类在选择矩阵的示例时,经常会设法选择一个奇异矩阵!

我确实对解决方案有问题,所以我进一步研究了一下。在ubuntu-kubuntu平台上,debian包numpy没有matrix和linalg子包,所以除了导入numpy外,还需要导入scipy。

如果A的对角线项乘以一个足够大的因子,例如2,那么矩阵很可能不再是奇异的或接近奇异的。所以

代码语言:javascript
复制
A = matrix( [[2,2,3],[11,24,13],[21,22,46]])

变得既不奇异也不近乎奇异,这个例子给出了有意义的结果……在处理浮点数时,必须注意不可避免的舍入错误的影响。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/211160

复制
相关文章

相似问题

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