2017-02-25 286 views
0

我应用了一个返回浮点数的移动平均逻辑。我转换花车用它来绘制线OpenCV的,但得到以下错误Python:无法将浮点数NaN转换为整数

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) 

如何解决它的任何建议之前诠释?

+0

您将分配给NaN的哪个整数值? – BlackBear

回答

0

看来你的movingAverage()函数返回NaN值。

尝试:

import numpy as np 

int(np.nan) 

会给你:

ValueError: cannot convert float NaN to integer 
5

基于您已发布什么,你movingAverage()函数在某点返回NaN

NaN是一个特殊的浮点标识值,意思是“不是数字”。一般来说,Python更喜欢抛出一个例外来返回NaN,所以sqrt(-1)log(0.0)这样的东西通常会增加而不是返回NaN。但是,您可能会从其他库中获取该值。一个很好的例子可能是尝试从电子表格中的字符串单元格中提取数字值。

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

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

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