【问题标题】:RuntimeWarning: divide by zero encountered in log (stats.boxcox)RuntimeWarning:除以日志中遇到的零(stats.boxcox)
【发布时间】:2015-08-05 13:28:47
【问题描述】:

我在尝试运行 stats.boxcox(list) 时收到 RuntimeWarning: divide by zero encountered in log 错误。

该列表不包含零值。我参考了其他一些帖子说我们可以使用np.errstate() 忽略错误。

但是,就我而言,我认为这是不合适的,因为stats.boxcox() 返回的值是没有意义的(都是常量,见下文)。

array([ 0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  ... ... ]

错误详情如下:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/stats/morestats.py:591: RuntimeWarning: divide by zero encountered in log
llf -= N / 2.0 * np.log(np.sum((y - y_mean)**2. / N, axis=0))
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/optimize/optimize.py:2063: RuntimeWarning: invalid value encountered in double_scalars
w = xb - ((xb - xc) * tmp2 - (xb - xa) * tmp1) / denomenter code here

【问题讨论】:

  • 您可能希望在此处更具体。您使用的是哪个版本的scipy?如果您只使用list 的前10 个值,是否也会发生这种情况?如果是这样,您能否向我们展示这些值,以便我们尝试重现您的问题?
  • @cel 我使用的是 scipy 版本 0.15.1。该列表包含 494 个号码。如果我随机删除 2 个数字,则不会出现问题。
  • 你传入的是一个 ndarray,而不是一个列表,对吧?
  • 是的。我正在使用 nparray。我改为列出,但我仍然得到同样的错误。
  • 正如@FrancoPiccolo 指出的那样,您可能遇到了github.com/scipy/scipy/issues/6873 中报告的错误。这已在 scipy 的开发分支中修复。修复将在下一个版本中(scipy 1.3)。

标签: python scipy divide-by-zero


【解决方案1】:

我遵循了这个 Github 线程上的建议并为我工作:

https://github.com/scipy/scipy/issues/6873

建议是使用stats.boxcox_normmax(array) 得到理想的lambda,然后进行boxcox 转换。

boxcox_lambda = boxcox_normmax(array, brack=(-1.9, 2.0),  method='mle')
transformed_array = boxcox(array, boxcox_lambda)

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多