我正在使用scipy优化功能并为其提供自定义最小化功能。我用
调用最小化器result = op.minimize(calc_chi2, start_list, args=())
calc_chi2()
函数看起来像
def calc_chi2(parameters):
if within_priors(parameters):
# calculate chi2
else:
return math.inf
此函数测试某些先验内部的参数是否应该返回非常大的chi ^ 2。我使用math.inf,然而导致最小化器将参数向量放到任何地方,所以我猜最小化器不喜欢math.inf ???如果我只是使用大量数字一切正常......我只是想知道这里的正确方法是什么?
答案 0 :(得分:0)
考虑抛出/捕获异常来处理无限chi ^ 2的情况 - 如果不是你描述的NaN行为,你不清楚你会发生什么,并且处理异常会让你明白你想要发生什么。
class InfiniteChiException(Exception):
"""This exception is raised under certain conditions, yadda yadda yadda"""
pass
def calc_chi2(parameters):
if within_priors(parameters):
# calculate chi2
else:
raise InfiniteChiException
try:
result = op.minimize(calc_chi2, start_list, args=())
catch InfiniteChiException:
# do something here