2024-06-12 04:00:16 发布
网友
我试图使用numpy或scipy在python中获得非方矩阵的左逆。 如何将下面的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
在Matlab中是否存在左逆\算子的numpy或scipy等价物?
\
对于那些希望解决大型稀疏最小二乘问题的人:
我已将LSQR算法添加到SciPy中。在下一个版本中,您将能够:
from scipy.sparse import csr_matrix from scipy.sparse.linalg import lsqr import numpy as np A = csr_matrix([[0., 1], [0, 1], [1, 0]]) b = np.array([[2.], [2.], [1.]]) lsqr(A, b)
它返回答案[1, 2]。
[1, 2]
如果您想在不升级SciPy的情况下使用这个新功能,可以从位于
http://projects.scipy.org/scipy/browser/trunk/scipy/sparse/linalg/isolve/lsqr.py
这里有一个方法可以处理稀疏矩阵(从注释中可以得到您想要的结果),它使用优化包中的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.]
这有点难看,因为我必须让形状符合莱斯特的要求。也许其他人知道怎么把这个弄得更整洁一点。
我还试图通过使用LinearOperators来使用scipy.sparse.linalg中的函数,但没有成功。问题是,所有这些函数都只用于处理平方函数。如果有人想这样做,我也想知道。
使用linalg.lstsq(A,y),因为A不是正方形。有关详细信息,请参见here。如果A是方形的,则可以使用linalg.solve(A,y),但在您的情况下不能。
linalg.lstsq(A,y)
A
linalg.solve(A,y)
对于那些希望解决大型稀疏最小二乘问题的人:
我已将LSQR算法添加到SciPy中。在下一个版本中,您将能够:
它返回答案
[1, 2]
。如果您想在不升级SciPy的情况下使用这个新功能,可以从位于
http://projects.scipy.org/scipy/browser/trunk/scipy/sparse/linalg/isolve/lsqr.py
这里有一个方法可以处理稀疏矩阵(从注释中可以得到您想要的结果),它使用优化包中的leastsq函数
产生
这有点难看,因为我必须让形状符合莱斯特的要求。也许其他人知道怎么把这个弄得更整洁一点。
我还试图通过使用LinearOperators来使用scipy.sparse.linalg中的函数,但没有成功。问题是,所有这些函数都只用于处理平方函数。如果有人想这样做,我也想知道。
使用
linalg.lstsq(A,y)
,因为A
不是正方形。有关详细信息,请参见here。如果A
是方形的,则可以使用linalg.solve(A,y)
,但在您的情况下不能。相关问题 更多 >
编程相关推荐