Python:无法将 float NaN 转换为整数

新手上路,请多包涵

我应用了返回浮点数的移动平均逻辑。在将它用于在 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 许可协议

阅读 784
1 个回答

根据您发布的内容,您的 movingAverage() 函数在某个时候返回 NaN

NaN 是一个特殊的浮点标记值,意思是“不是数字”。 In general, Python prefers raising an exception to returning NaN , so things like sqrt(-1) and log(0.0) will generally raise instead of returning NaN .但是,您可能会从其他一些库中取回此值。一个很好的例子可能是尝试从电子表格的字符串单元格中提取数值。

标准 Python 提供了 math.isnan(x) ,您可以使用它来测试 NaN 。您可以 assert 反对它,在找到它时引发异常,或者您可以为 NaN 提供 _替换值_。

您似乎在绘制图表或图形。我的建议是专门尝试确定这个问题(为什么你得到这个特定的 NaN ),然后编写一些代码来提供替代。

例如,您可能确定电子表格中的列标题是 NaN这个特定 实例的原因,并修复代码以跳过列标题。但是,为了防止以后再次发生,您可以在 --- 函数中检查 isnan() movingAverage() 函数,并将任何值替换为 0 或最大值,有效地处理 NaN 0 或无穷大,以对您的图形更有意义的为准。

原文由 aghast 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题