我应用了一个移动平均值逻辑,返回float。在OpenCV中使用它绘制线之前,我将该浮点转换为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)
有什么解决办法吗?
根据您发布的内容,您的
movingAverage()
函数在某个时刻返回NaN
。NaN
是一个特殊的浮点sentinel值,意思是“不是数字”。通常,Python喜欢引发异常而不是返回NaN
,因此像sqrt(-1)
和log(0.0)
这样的东西通常会引发而不是返回NaN
。但是,您可以从其他库中获取此值。一个很好的例子可能是试图从电子表格中的字符串单元格中提取数值。标准Python提供了
math.isnan(x)
,您可以使用它来测试NaN
。您可以对它进行assert
,在找到它时引发异常,或者为NaN
提供一个替换值。您似乎正在绘制图表。我的建议是具体地尝试识别这个问题(为什么您得到这个特定的
NaN
),然后编写一些代码来提供替换。例如,您可以确定电子表格中的列标题负责
NaN
的这个特定的实例,并修复代码以跳过列标题。但是,为了防止以后的重复,您可以检查movingAverage()
函数中的isnan()
,并用0或最大值替换任何值,有效地将NaN
视为0或无穷大,无论哪个对您的图更有意义。似乎您的
movingAverage()
函数返回NaN值。试试看
会给你
测试NaN
您还可以使用:
它会将NaN值更改为(可能为0.0),然后可以将其转换为整数。我可能会检查以确保它变为0对您的数据有效。
相关问题 更多 >
编程相关推荐