“ double_scalars中遇到无效值”警告,可能为numpy


81

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

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


8
双标量是type的值double。它被称为标量,以区分numpy和双精度数组。
穆罕默德·阿尔卡鲁里

就我而言,>>> numpy.array([-4.00000000e-01])** 1.49011611939e-08

Answers:


60

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


11
具体来说,用于numpy.seterr('raise')引发任何错误的异常。
Yariv

65

就我而言,我发现它被零除。


2
我也是。我试图比较完全相同的向量,并除以零
chimpsarehungry 2012年

2
或取空列表的平均值。哎呀。
马特

7
被零除会不会产生一个ZeroDivisionError
jfn

5
@jfn通常,但是numpy有时会把它变成警告,因为从技术上讲,这nan是对除以零的有效IEEE标准答案。
ocket8888 '17

13

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


4
我发生了类似的事情,就我而言,我在一个空数组上调用了numpy的mean函数。
亚历山大

需要注意的另一件事...当尝试将负数提高到小数幂时,我也会得到这个值:ValueError:负数不能提高到小数幂
Travis Vaught 2013年

8

零大小的数组传递给 numpy.mean引发此警告(如若干评论所示)。

对于其他一些候选人:

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

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

  • min,argminValueError在空数组上加注
  • randn需要*arg; 使用randn(*[])返回单个随机数
  • std,var返回nan一个空数组

1

我遇到了类似的问题-在...中遇到了无效的值...花了很多时间试图找出导致此错误的原因之后,我认为在我的情况下这是由于数据帧中的NaN引起的。检验使用熊猫中缺少的数据的情况。

无==无正确

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也会发生变化。


0

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.