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

问题描述 投票:0回答:8

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

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

python numpy warnings matplotlib
8个回答
101
投票

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


83
投票

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


16
投票

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


14
投票

传递给

numpy.mean
的零大小数组会引发此警告(如几条评论中所示)。

对于其他一些候选人:

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

其他候选人没有提出此警告:

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

2
投票

我遇到了类似的问题 - 在...中遇到无效值 在花了很多时间试图找出导致此错误的原因之后,我相信在我的情况下,这是由于我的数据框中的 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 也会发生变化。


2
投票

我在计算时遇到了这一点

np.var(np.array([]))
np.var
将除以数组的大小,在这种情况下为零。


0
投票

一旦您执行

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

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

有输出

NaN

0
投票

每当您使用 CSV 导入时,请尝试使用

df.dropna()
以避免所有此类警告或错误。

© www.soinside.com 2019 - 2024. All rights reserved.