对于SciPy函数fmin_ncg
,有没有一种方法可以将hessian和gradient作为变量而不是函数来提供?在
我试图用python重写一些Matlab代码。该代码涉及到使用优化例程将一些参数拟合到一组数据中。为此,我提供了梯度和黑森函数。E、 g在Matlab中我有这样的东西:
fmincon(@myFunc,x0,[],[],[],[],lb,ub,[],options);
其中myFunc
返回3个值:函数求值、梯度和hessian。在
但是对于Python中的fmin_ncg
,gradiant和hessian似乎必须作为单独的函数提供。在
对我来说,这似乎是低效的,因为代码必须经过一个大的数据集,并且有一些计算是函数、梯度和hessian函数所共有的。e、 想象一个函数f(x) = a(x)*b(x)
,梯度g(x) = a(x)*c(x)
,hessian h(x) = a(x)*d(x)
。。。在Matlab中,我可以计算a(x)
一次,而在python中我似乎要计算三次。在
我是否误解了fmin_ncg
的工作原理,或者有什么方法可以解决这个问题?在
您可以创建一个包含所有函数的类。每次迭代时,在第一次函数调用期间计算公共变量,然后在其他调用中重用。
fmin_ncg
的回调特性可用于在每次迭代结束时重置公共变量。在你会这样用的。在
^{pr2}$这会增加一些开销,因此只有在计算公共变量的计算量很大时才值得。在
相关问题 更多 >
编程相关推荐