これは、optimizeパッケージの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.]
lesssqが望むものに応じて形状を一致させる必要があったため、これはちょっと醜いです。多分誰か他の人がこれをもう少し整頓する方法を知っています。
また、LinearOperatorsを使用して、scipy.sparse.linalgの関数で動作するようにしようとしましたが、役に立ちませんでした。問題は、これらの関数がすべて正方形の関数のみを処理するように作成されていることです。誰かがその方法を見つけたら、私も知りたいです。