【问题标题】:'invalid value encountered in double_scalars' warning, possibly numpy'double_scalars 中遇到无效值' 警告,可能是 numpy
【发布时间】:2011-04-15 14:36:34
【问题描述】:

当我运行我的代码时,我会偶尔收到这些警告,总是四人一组。我试图通过在某些语句之前和之后放置调试消息来定位源。

Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars

这是一个 Numpy 警告吗,什么是双标量?

来自我使用的 Numpy

min(), argmin(), mean() and random.randn()

我也使用 Matplotlib

【问题讨论】:

  • 双标量是double 类型的值。它被称为标量以区分 numpy 中的双精度数组。
  • 在我的例子中,在 >>> numpy.array([-4.00000000e-01]) ** 1.49011611939e-08 中有一个“FloatingPointError:在电源中遇到无效值”

标签: python numpy warnings matplotlib


【解决方案1】:

一旦您使用NaN('不是数字')、math.inf、除以零等执行操作,您就会收到此警告。 请注意,NaN 等操作的输出编号也会导致 NaN。 例如:

import math as m
print(1 + m.nan)

有输出

NaN

【讨论】:

    【解决方案2】:

    我在计算 np.var(np.array([])) 时遇到了这个问题。 np.var 将分割数组的大小,在这种情况下为零。

    【讨论】:

      【解决方案3】:

      每当您使用 csv 导入时,请尝试使用 df.dropna() 来避免所有此类警告或错误。

      【讨论】:

        【解决方案4】:

        就我而言,我发现它是除以零。

        【讨论】:

        • 我的也是。我试图比较完全相同的向量并被零除
        • 或者取空列表的平均值。哎呀。
        • 除以零不会引发ZeroDivisionError 吗?
        • @jfn 通常,但 numpy 有时会将其变成警告,因为从技术上讲,nan 是除以零的有效 IEEE 标准答案。
        【解决方案5】:

        我遇到了类似的问题 - 在...中遇到无效值在花了很多时间试图找出导致此错误的原因之后,我相信在我的情况下这是由于我的数据框中的 NaN。查看处理 pandas 中缺失的数据。

        无 == 无 是的

        np.nan == np.nan 假的

        当 NaN 不等于 NaN 时,除法和乘法等算术运算会引发此错误。

        你可以做几件事来避免这个问题:

        1. 使用 pd.set_option 设置要在分析中考虑的小数位数,这样无穷小的数字就不会触发类似问题 - ('display.float_format', lambda x: '%.3f' % x)。

        2. 使用 df.round() 对数字进行四舍五入,以便 Panda 从分析中删除剩余的数字。最重要的是,

        3. 将 NaN 设置为零 df=df.fillna(0)。如果用零填充 NaN 不适用于您的数据集,请小心,因为这会将记录视为零,因此平均值中的 N、std 等也会发生变化。

        【讨论】:

          【解决方案6】:

          传递给numpy.mean 的零大小数组会引发此警告(如多个 cmets 所示)。

          对于其他一些候选人:

          • median 也会在大小为零的数组上引发此警告。

          其他候选人不提出此警告:

          • min,argmin 都在空数组上引发 ValueError
          • randn 接受*arg;使用 randn(*[]) 返回单个随机数
          • std,var 在空数组上返回 nan

          【讨论】:

            【解决方案7】:

            有时数据中的 NaN 或 null 值会在 Numpy 中生成此错误。如果您从 CSV 文件或类似文件中提取数据,然后使用 numpy 数组对数据进行操作,则问题可能源于您的数据提取。您可以尝试为您的代码提供一组具有已知值的数据,看看是否得到相同的结果。

            【讨论】:

            • 类似的事情发生在我身上,在我的例子中,我在一个空数组上调用了 numpy 的 mean 函数。
            • 另一件需要注意的事情......我在尝试将负数提高到分数幂时也得到了这个:ValueError:负数不能被提升到分数幂
            【解决方案8】:

            看起来像浮点计算错误。检查numpy.seterr 函数以获取有关其发生位置的更多信息。

            【讨论】:

            • 具体来说,使用numpy.seterr('raise') 在任何错误时引发异常。
            猜你喜欢
            • 2020-07-06
            • 2021-01-25
            • 2015-03-03
            • 2020-12-01
            • 2019-04-10
            • 2016-10-13
            • 1970-01-01
            • 1970-01-01
            • 2016-04-29
            相关资源
            最近更新 更多