当我运行代码时,我会收到这些警告,总是以四个为一组,偶尔出现。我尝试通过在某些语句之前和之后放置调试消息来定位源代码,以查明其来源。
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 或 null 值会在 Numpy 中生成此错误。 如果您从 CSV 文件或类似文件中提取数据,然后使用 numpy 数组对数据进行操作,则问题可能源于您的数据提取。 您可以尝试向代码提供一小组具有已知值的数据,然后看看是否得到相同的结果。
传递给
numpy.mean
的零大小数组会引发此警告(如几条评论中所示)。
对于其他一些候选人:
median
也会在零大小的数组上引发此警告。其他候选人没有提出此警告:
min,argmin
都在空数组上引发 ValueError
randn
需要*arg
;使用 randn(*[])
返回单个随机数std,var
在空数组上返回 nan
我遇到了类似的问题 - 在...中遇到无效值 在花了很多时间试图找出导致此错误的原因之后,我相信在我的情况下,这是由于我的数据框中的 NaN 造成的。查看如何处理 pandas 中的缺失数据。
无==无 正确
np.nan == np.nan 错误
当 NaN 不等于 NaN 时,除法和乘法等算术运算会导致抛出此错误。
您可以采取以下措施来避免此问题:
使用 pd.set_option 设置分析中要考虑的小数位数,这样无限小的数字就不会触发类似的问题 - ('display.float_format', lambda x: '%.3f' % x)。
使用 df.round() 对数字进行四舍五入,以便 Panda 从分析中删除剩余的数字。最重要的是,
将 NaN 设置为零 df=df.fillna(0)。如果用零填充 NaN 不适用于您的数据集,请小心,因为这会将记录视为零,因此平均值、标准差等中的 N 也会发生变化。
我在计算时遇到了这一点
np.var(np.array([]))
。 np.var
将除以数组的大小,在这种情况下为零。
一旦您执行
NaN
(“不是数字”)、math.inf
、除以零等操作,您就会收到此警告。
请注意,使用 NaN
等操作的输出编号也会导致 NaN
。
例如:
import math as m
print(1 + m.nan)
有输出
NaN
每当您使用 CSV 导入时,请尝试使用
df.dropna()
以避免所有此类警告或错误。