我应用了返回浮点数的移动平均逻辑。在将它用于在 OpenCV 中绘制线条之前,我将该 float 转换为 int 但出现以下错误
ValueError: cannot convert float NaN to integer
示例代码
def movingAverage(avg, new_sample, N=20):
if (avg == 0):
return new_sample
avg -= avg / N;
avg += new_sample / N;
return avg;
x1 = int(avgx1) #avgx1 is returned from the movingaverage function
y1 = int(avgy1)
x2 = int(avgx2)
y2 = int(avgy2)
cv2.line(img, (x1, y1), (x2, y2), [255,255,255], 12)
关于如何解决它的任何建议?
原文由 nad 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据您发布的内容,您的
movingAverage()
函数在某个时候返回NaN
。NaN
是一个特殊的浮点标记值,意思是“不是数字”。 In general, Python prefers raising an exception to returningNaN
, so things likesqrt(-1)
andlog(0.0)
will generally raise instead of returningNaN
.但是,您可能会从其他一些库中取回此值。一个很好的例子可能是尝试从电子表格的字符串单元格中提取数值。标准 Python 提供了
math.isnan(x)
,您可以使用它来测试NaN
。您可以assert
反对它,在找到它时引发异常,或者您可以为NaN
提供 _替换值_。您似乎在绘制图表或图形。我的建议是专门尝试确定这个问题(为什么你得到这个特定的
NaN
),然后编写一些代码来提供替代。例如,您可能确定电子表格中的列标题是
NaN
的 这个特定 实例的原因,并修复代码以跳过列标题。但是,为了防止以后再次发生,您可以在 --- 函数中检查isnan()
movingAverage()
函数,并将任何值替换为 0 或最大值,有效地处理NaN
0 或无穷大,以对您的图形更有意义的为准。