2017-02-25 756 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或無窮大,無論哪一個對您的圖更有意義。

相關問題