我有一些包含三列、x
、y
和的数据b
。在这里,b
每个值都有关联的x
值。(Nb x 总是增加)
也就是说,数据看起来像:
x y b
1 4 7
2 5 8
3 6 9
假设此数据适合某个模型y = ax + math.log(b)
。我可以通过执行以下操作来计算每个值:
def findB(x):
for i in range(0, len(xData)):
if xData[i] >= x:
return bData[i]
def f(x, a):
b = findB(x)
result = a*x + math.log(b)
return result
现在说我想优化 f(x,a) 的拟合以a
使用scipy.optimise.curve_fit
.
我试图这样做:
popt, pcov = scipy.optimize.curve_fit(f, xData, yData)
但这样做会导致错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这是由于 curve_fit 函数将所有 x 数据作为一个数组传递,导致if xData[i] >= x:
语句变得不明确。
我想不出办法解决这个问题。我尝试创建 xData 和 bData 的配对列表并将其传递curve_fit
给无济于事。
如果我只是硬编码b
为一些预先确定的值,这会起作用,所以我相信我curve_fit
正确地调用了该函数。欢迎咨询。