我有一个非常基本的问题。我想使用scipy.minimize,但修复了一些常量。这是一个不起作用的玩具示例,但它显示了我想要实现的目标:
import scipy.optimize
def error(a, b, guess):
target = 4
return abs(a*guess - b*target)
a = 2
b = 3
calculated = scipy.optimize.minimize(error, (a, b, 0,))
print(calculated.x)
我的真实代码a
和b
是在主体中计算的,因此我无法将它们硬编码到error
函数中。
如何在固定常数中使用最小化,例如本例?
建议使用args。这是我失败的尝试:
import scipy.optimize
def error(x, b, c, n):
return abs(c*b**x - n * 2**n)
n = 10
c = 1.1547
b = 1.6875
x = 10
calculated = scipy.optimize.minimize(error, 5, args=(b,c,n))
print(calculated.x)
这只会返回[5.]
,这不是最佳选择。
答案 0 :(得分:1)
只需使用lambda
函数创建一个修复常量的新函数:第一个示例变为:
import scipy.optimize
def error(a, b, guess):
target = 4
return abs(a*guess - b*target)
a = 2
b = 3
calculated = scipy.optimize.minimize(lambda guess: error(a, b, guess), 0)
正如预期的那样, calculated.x
返回6。感谢其他评论者指出args
,这很有趣,但我总是使用这种lambda
方法。