私は簡単な機能を持っています
def square(x, a=1):
return [x**2 + a, 2*x]
x
いくつかのパラメータについて、最小化したいと思いますa
。私は現在、精神的に次のようなことをするループを持っています:
In [89]: from scipy import optimize
In [90]: res = optimize.minimize(square, 25, method='BFGS', jac=True)
In [91]: [res.x, res.fun]
Out[91]: [array([ 0.]), 1.0]
In [92]: l = lambda x: square(x, 2)
In [93]: res = optimize.minimize(l, 25, method='BFGS', jac=True)
In [94]: [res.x, res.fun]
Out[94]: [array([ 0.]), 2.0]
これで、関数は既にベクトル化されています
In [98]: square(array([2,3]))
Out[98]: [array([ 5, 10]), array([4, 6])]
In [99]: square(array([2,3]), array([2,3]))
Out[99]: [array([ 6, 12]), array([4, 6])]
つまり、ループするよりも、すべての最適化を並行して実行する方がおそらくはるかに高速です。それはSciPyで簡単にできることですか? または他のサードパーティのツールですか?