【发布时间】:2020-04-29 14:57:25
【问题描述】:
我正在使用 Python + NumPy + SciPy 根据数据确定方程的系数。方程定义如下:
def func (x, a,b,c,d):
if x < d:
return 0
else:
return a * ( 1 - np.exp( - b * (x - c) ** d)
根据我的发现,根据this discussion,传统的函数表示将不起作用,必须替换为:
def func (x, a,b,c,d):
return np.where ( x < c,
0 ,
a * ( 1 - np.exp( - b * (x - c) ** d) )
)
这会引发错误RuntimeWarning: invalid value encountered in power a * ( 1 - np.exp( - b * (x - c) ** d)。
据我了解,这是因为试图创建 2 个数字数组(在这种情况下):
- 第一个用0填充
- 第二个填充了
a * ( 1 - np.exp( - b * (x - c) ** d) )的结果
然后,根据这两个的条件选择创建结果数组。
在区间x < c 中创建第二个数组,并结合d 的小数值导致从负数中求根。这导致了问题。
我的解决方法是:
def func (x, a,b,c,d):
return np.where ( x < c,
0 ,
a * ( 1 - np.exp( - b * np.abs( x - c) ** d) )
)
它工作正常,因为x < c 的值范围由条件定义,
但是有没有更好的方法呢?
理想情况下,如果x < c 和unversal,甚至可以防止计算a * ( 1 - np.exp( - b * (x - c) ** d),make 是否适用于更多的条件?
【问题讨论】:
标签: python-3.x scipy scipy-optimize