Python中计算大型2D数组差值出现无效值的问题求助
问题分析与解决
问题现象
计算两个大型2D数组差值时,多数元素结果正确,但部分单元格出现6500、8000这类异常大值,导致均值计算结果异常,仅小部分数据出错。
核心原因
你使用的yuv420p16le格式是16位无符号整数(uint16),当执行x - y时,如果x < y,无符号整数会发生溢出:比如x=5,y=10,uint16下计算结果为65536 - (10-5) = 65531,这就是你看到的异常大值。
解决方案
在做减法前,将数组转换为有符号整数类型(比如np.int32),避免无符号溢出:
import numpy as np import yuvio import csv # 读取YUV帧 yuv_frames = yuvio.mimread("test.yuv", 3840, 2160, 'yuv420p16le', 1, 1) yuv_frame_temp = yuvio.mimread("test.yuv", 3840, 2160, 'yuv420p16le', 1+30, 1) # 转换为有符号32位整数再计算差值 x = np.array(yuv_frames[0].y, dtype=np.int32) y = np.array(yuv_frame_temp[0].y, dtype=np.int32) z = np.subtract(x, y)
如果不需要保留过大的数值范围,也可以用np.int16,但np.int32能避免绝大多数溢出情况,更稳妥。
内容的提问来源于stack exchange,提问作者Nithin
相关产品推荐
相关产品推荐

