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

升级Numpy至1.14.1后执行任意命令触发RuntimeWarning的问题咨询

解决Numpy 1.14.1升级后出现的RuntimeWarning: invalid value encountered in reduce问题

我之前升级Numpy到1.14.x版本时也碰到过一模一样的情况,明明只是输个1+1都弹警告,当时整懵了,后来折腾了一阵终于搞清楚原因和解决办法:

问题原因

这个警告不是你当前执行的简单计算触发的,而是你的Python环境里有其他代码(比如加载的第三方库、后台运行的脚本)在偷偷调用Numpy的reduce相关函数(像np.sum、np.mean这类底层依赖reduce的函数),并且处理了包含NaN或者inf的无效值数组。

Numpy 1.14.x版本对警告机制做了调整——之前版本里可能被静默忽略的无效值处理操作,现在会主动抛出警告。哪怕你当前操作看起来和它无关,只要后台有代码在运行时触发了这个逻辑,警告就会弹出来。

解决办法

1. 先定位触发警告的根源

想要彻底解决,得先找到到底是谁在搞事情。可以用Python的warnings模块把警告转换成错误,这样就能看到完整的调用栈:

import warnings
# 把警告转为错误,方便查看调用栈
warnings.filterwarnings("error")
# 执行你之前触发警告的操作,比如输入1+1
1+1

运行后会抛出完整的错误栈,里面会明确显示是哪个函数、哪个库触发了这个警告。

2. 根据根源针对性修复

  • 如果是第三方库导致的:检查该库的版本是否和Numpy 1.14.1兼容。比如pandas在0.22.x之前的版本和Numpy 1.14.x有兼容问题,只要把对应的库升级到最新兼容版本就能解决。
  • 如果是自己的代码导致的:找到使用np.reduce或者依赖它的函数的地方,检查是否处理了包含NaN的数组。可以替换成np.nansum、np.nanmean这类专门处理NaN的函数;或者如果确实需要保留无效值,也可以在特定代码块里临时设置Numpy的错误处理:
    import numpy as np
    # 临时屏蔽无效值警告
    old_settings = np.seterr(invalid='ignore')
    # 执行你的代码
    # ...
    # 恢复原来的设置
    np.seterr(**old_settings)
    

3. 临时应急方案(不推荐长期使用)

如果暂时没时间定位根源,可以在代码开头全局屏蔽这个警告,但这只是治标不治本:

import numpy as np
# 全局屏蔽无效值相关警告
np.seterr(invalid='ignore')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:33