升级Numpy从1.23.3到1.25.0后触发uint64取负溢出警告
Numpy 1.25.0中无符号64位整数取负触发RuntimeWarning的问题
问题复现
- Numpy 1.23.3版本:执行无符号64位整数取负操作,输出正确结果且无警告
import numpy as np x = np.uint64(0xffffffff) print(-x) # 输出:18446744069414584321 - Numpy 1.25.0版本:相同操作输出结果正确,但触发溢出警告
import numpy as np x = np.uint64(0xffffffff) print(-x) # 输出: # 18446744069414584321 # <ipython-input-4-adbfb5bb01c0>:1: RuntimeWarning: overflow encountered in scalar negative # print(-x)
其他用户反馈
确实有大量用户遇到过这个问题,这是Numpy 1.25.x版本对无符号整数标量运算的警告逻辑调整导致的。此前版本中,无符号整数取负的溢出行为被默认忽略;而1.25.0开始,这类标量运算的溢出会触发RuntimeWarning,不过运算结果仍遵循无符号整数的补码规则(即-x等价于2^64 - x),不影响计算正确性。
如果需要消除该警告,可采用以下两种方案:
- 临时抑制警告:
import numpy as np np.warnings.filterwarnings('ignore', category=np.RuntimeWarning) x = np.uint64(0xffffffff) print(-x) - 显式类型转换(业务逻辑允许时):
import numpy as np x = np.uint64(0xffffffff) print(-x.astype(np.int64))
内容的提问来源于stack exchange,提问作者Talha Tayyab
相关产品推荐
相关产品推荐

