不规则错误警告:RuntimeWarning:在double_scalars中遇到无效值

时间:2018-07-26 10:08:44

标签: runtime-error

我的代码包含一些随机步骤和指数表达式(单调表达式),需要在末尾找到其根。 "RuntimeWarning: invalid value encountered in double_scalars"偶尔出现。例如,当我跑步5次时,它会出现3或2次。你能告诉我这是怎么回事吗? PS:每次都能得到结果,但这只是警告让我感到困惑。

1 个答案:

答案 0 :(得分:0)

有两种解决方法,取决于您的数据。

1。

当您处理大量数字并且超出了double的限制

要解决此问题,该方法实际上是相当数学的。

首先,当且仅当 (T_data[runs][0])*(np.exp(-(x)*(T_data[runs][1])))始终小于1.7976931348623157e+308

a*e^(-x*b) = e(ln(a)-xb)

因此,(T_data[runs][0])*(np.exp(-(x)*(T_data[runs][1]))) = np.exp(T_data[runs][0]-(x)*(T_data[runs][1]))

改为使用np.exp(np.log(T_data[runs][0])-(x)*(T_data[runs][1]))

2。

但是,正如您所说的,每次都会得到结果,(T_data[runs][0])*(np.exp(-(x)*(T_data[runs][1])))可能接近零,该值太小以至于不能再保留double值,但另存为0也不会造成损害。

您应该像这样更改代码,以避免出现警告。

temp = (x)*(T_data[runs][1])) > 709 ? 0 : np.exp(-(x)*(T_data[runs][1]))
exponential += (T_data[runs][0]) * temp 
## As ln(1.7976931348623157e+308) ~= 709.78