Pythonmatrix的逆matrix
我如何得到pythonmatrix的逆? 我自己实现了,但它是纯Python,我怀疑有更快的模块来做到这一点。
如果你做matrix处理,你应该看看numpy 。 这是一个主要用C编写的模块,比纯python编程要快得多。 这里是一个如何反转matrix,并做其他matrix操作的例子。
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 AT # Transpose of A. print A*x # Matrix multiplication of A and x. print AI # Inverse of A. print linalg.solve(A, x) # Solve the linear equation system.
你也可以看看数组模块,当你只需要处理一种数据types时,这是一个更有效的列表实现。
确保你真的需要反转matrix。 这通常是不必要的,可能在数字上不稳定。 当大多数人问如何反转一个matrix时,他们真的想知道如何求解Ax = b,其中A是一个matrix,x和b是向量。 使用直接求解方程Ax = b的代码比计算A的反函数然后再乘以B的代码更加高效和准确。即使您需要为许多b值求解Ax = b,也不是一个好主意倒置A.如果必须为多个b值求解系统,则保存A的Cholesky因式分解,但不要倒置它。
请参阅不反转该matrix 。
可惜的是,select的matrix在这里再次重复,要么是单一的,要么是条件不好的:
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
根据定义,A乘以matrixA本身的逆必须给出一个单位matrix。 被赞美的解释中select的A不会这样做。 事实上,仅仅看倒转就可以发现反演不能正常工作。 看一下单个术语的大小 – 与原始Amatrix的术语相比,它们是非常非常大的…
非常值得一提的是,当挑选matrix的例子时,人类经常设法select一个奇异的matrix!
我的解决scheme确实有问题,所以仔细研究一下。 在ubuntu-kubuntu平台上,debian package numpy没有matrix和linalg子包,所以除了导入numpy之外,还需要导入scipy。
如果A的对angular项乘以足够大的因子(例如2),则matrix将很可能不再是单数或接近单数。 所以
A = matrix( [[2,2,3],[11,24,13],[21,22,46]])
变得既不单一也不接近单数,这个例子给出了有意义的结果。当处理浮动数字时,必须警惕不可避免的四舍五入错误的影响。
感谢您的贡献,
OldAl。
你可以计算recursionmatrix的行列式,然后形成邻接matrix
这是一个简短的教程
我认为这只适用于方matrix
计算它们的另一种方法涉及克 – 施密特正交化,然后转置matrix,正交matrix的转置是其逆!
Numpy将适合大多数人,但你也可以在Sympy中做matrix
尝试在http://live.sympy.org/上运行这些命令;
M = Matrix([[1, 3], [-2, 3]]) M M**-1
为了好玩,尝试M**(1/2)
如果你讨厌numpy,拿出RPy和R的本地副本,然后用它来代替。
(我也会回应,让你真的需要反转matrix,例如,在R中,linalg.solve和solve()函数实际上并没有进行完全的反演,因为它是不必要的)。