2016-11-06 57 views
2

觀察無效值 「少」 np.nan在陣列中進行比較時,

np.nan < 0 

False 

np.array([np.nan]) < 0 

array([False], dtype=bool) 

然而

np.array([-1, np.nan]) < 0 
//anaconda/envs/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in less 
    if \__name\__ == '\__main\__': 
array([ True, False], dtype=bool) 

是什麼錯誤呢?

+0

嘗試再次運行這些測試。 '如果name =='main':'看起來更像是一個語法錯誤,而不是一個真正的numpy問題。確保錯誤是可重現的。 – hpaulj

+0

@hpaulj當我回到電腦時,我會重新發布。我測試了很多次。必須是某個版本的東西。我將包含該信息或者打開一個問題。 – piRSquared

+0

@hpaulj它只是格式化的問題,它被複制粘貼到SO上。 'if __name__ =「__main __」'部分來自ipython報告警告的方式('np.less'在單獨一行中)。 –

回答

3

這只是一個警告,不是一個例外。 Numpy會盡力幫助您,並報告您的陣列中有nan。忽略它是安全的。如果警告本身困擾你(或你的用戶),您可以禁止它:

with np.errstate(invalid='ignore'): 
    np.less([np.nan, 0], 1) 

然而,這真的不推薦,因爲它可能會掩蓋不太明顯的問題,使調試困難,如果你需要找到一個nan來自冗長的計算。

注意一個nan的語義:nan > 0nan < 0nan < nannan == nan都是False

還要注意的是,在numpy的(不像例如熊貓)nan的真正含義無效不可

+0

nan =不是數字 – adr