numpy或scipy中的左逆?
我想在Python中使用numpy或scipy来获取一个非方阵的左逆矩阵。请问如何把下面的Matlab代码转换成Python呢?
>> A = [0,1; 0,1; 1,0]
A =
0 1
0 1
1 0
>> y = [2;2;1]
y =
2
2
1
>> A\y
ans =
1.0000
2.0000
在Python中,有没有类似于Matlab中左逆运算符\
的功能呢?
7 个回答
2
这里有一个方法可以处理稀疏矩阵(根据你的评论,这正是你想要的),它使用了优化包中的leastsq函数。
from numpy import *
from scipy.sparse import csr_matrix
from scipy.optimize import leastsq
from numpy.random import rand
A=csr_matrix([[0.,1.],[0.,1.],[1.,0.]])
b=array([[2.],[2.],[1.]])
def myfunc(x):
x.shape = (2,1)
return (A*x - b)[:,0]
print leastsq(myfunc,rand(2))[0]
这个方法会生成
[ 1. 2.]
这个方法看起来有点复杂,因为我不得不调整形状以符合leastsq的要求。也许其他人知道怎么让这个过程更简单一些。
我还尝试过使用scipy.sparse.linalg中的函数,利用LinearOperators来实现,但没有成功。问题在于那些函数都是为了处理方形函数而设计的。如果有人找到其他方法,我也很想知道。
2
你也可以在 numpy/scipy
中找找和伪逆函数 pinv
相对应的功能,这也是一种可以考虑的选择,跟其他答案相比。
11
因为 A
不是一个正方形的矩阵,所以你应该使用 linalg.lstsq(A,y)
。想了解更多信息,可以查看 这里。如果 A
是正方形的矩阵,你可以使用 linalg.solve(A,y)
,但在你的情况下不适用。