You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何np.sum([-np.Inf, +np.Inf])会触发无效值reduce警告?

NumPy 求和正负无穷时的警告问题

触发警告的场景

执行命令:

python -c "import numpy as np; print(np.sum([-np.Inf, +np.Inf]))" 

得到输出:

numpy\core\fromnumeric.py:86: RuntimeWarning: invalid value encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
nan

疑问点

  • 执行以下两个命令均无警告,说明警告并非由 Inf 本身导致:
    python -c "import numpy as np; print(np.sum([-np.Inf, -np.Inf]))" 
    
    python -c "import numpy as np; print(np.sum([+np.Inf, +np.Inf]))" 
    
  • 执行以下命令也无警告,说明警告并非由 NaN 结果导致:
    python -c "import numpy as np; print(np.sum([np.nan, np.nan]))"   
    

警告触发原因

正无穷加负无穷属于 IEEE 754 标准定义的无效运算(invalid operation),NumPy 在检测到这类运算时会抛出 RuntimeWarning。而两个同号无穷相加结果仍是同号无穷,属于合法运算;两个 NaN 相加结果为 NaN,但这类运算不属于「无效运算」范畴,因此都不会触发警告。

保留 NaN 结果的同时消除警告的方法

有两种实用方式:

  1. 临时抑制特定警告:使用 NumPy 的 errstate 上下文管理器,仅屏蔽无效运算类警告,不影响其他类型的警告提示:
python -c "import numpy as np; with np.errstate(invalid='ignore'): print(np.sum([-np.Inf, +np.Inf]))"
  1. 全局调整警告设置:如果需要长期屏蔽这类警告,可以全局修改 NumPy 的错误处理配置:
python -c "import numpy as np; np.seterr(invalid='ignore'); print(np.sum([-np.Inf, +np.Inf]))"

注意:第二种方式会全局屏蔽所有「无效运算」类型的警告,使用前需确认不会遗漏其他需要关注的异常场景。

内容的提问来源于stack exchange,提问作者bers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:10:28