在double_scalars中遇到无效值警告,可能是numpy

当我运行我的代码时,我会得到这些警告,总是以四个一组的forms出现。 我试图通过在某些语句之前和之后放置debugging消息来定位源,以查明其来源。

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

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

在我的情况下,我发现它被零除

有时数据中的NaN或空值将会与Numpy一起产生这个错误。 如果你是从say,CSV文件或类似的东西中提取数据,然后使用numpy数组对数据进行操作,那么问题可能源于你的数据提取。 您可以尝试为您的代码提供一组已知值的数据,并查看是否得到相同的结果。

传递给numpy.mean零大小的数组引发了这个警告(如几个注释中所示)。

对于其他一些候选人:

  • median也会在零大小的数组median引发这个警告。

其他候选人不提这个警告:

  • min,argmin都在空数组上提高了ValueError
  • randn需要*arg ; 使用randn(*[])返回一个随机数
  • std,var返回一个空数组上的nan

我遇到了类似的问题 – 在…中遇到无效的值花了很多时间,试图找出是什么原因导致这个错误我相信我的情况下,这是由于我的数据框中的NaN。 看看在pandas丢失数据的工作。

无==无真

np.nan == np.nan False

当NaN不等于NaN时,那么像分割和乘法这样的算术运算会引起这个错误。

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

  1. 使用pd.set_option设置分析的小数位数,所以infinitesmall数字不会触发类似的问题 – ('display.float_format',lambda x:'%.3f'%x)。

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

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