numpy.absolute方法返回负数异常问题排查咨询
问题根因
该异常是有符号8位整型(int8)数值溢出导致的,和np.absolute本身的计算逻辑无关。
有符号8位整型的可表示数值范围为 -128 ~ 127,这个类型下不存在+128这个合法值。当你对值为-128的int8元素取绝对值时,数学上的正确结果是128,但该值超出了int8的表示上限,会发生整数溢出回绕,最终计算结果仍然是-128,和你观测到的输出完全吻合。
修复方法
在执行绝对值计算前,将数组转换为取值范围更大的数值类型即可,可选方案:
- 转换为int16类型:可表示范围为
-32768 ~ 32767,足够容纳-128的绝对值结果,无溢出风险 - 直接转换为float32/float64类型:适配后续计算均值的需求,无需再次做类型转换
参考修改后的代码:
import h5py import numpy as np with h5py.File('<filename>.h5', 'r') as hdf: timestream_data = hdf.get('timestream') # 读入数据时直接指定dtype为范围更大的类型,从源头避免溢出 timestream = np.array(timestream_data, dtype=np.int16) # 直接用enumerate获取索引,比反复转list查index效率高很多 for idx, x in enumerate(timestream): abs_x = np.absolute(x) print("Index: %d" % idx, x, abs_x)
内容的提问来源于stack exchange,提问作者Adam Mills
相关产品推荐
相关产品推荐

