2014-02-17 97 views
1

我相信這是一個簡單的問題,並尋找相關的主題,但我沒有找到正確的東西。這裏是問題:與NaN比較兩個列表python

我有兩個NumPy數組,我需要通過計算一些標準來進行統計分析,例如相關係數和納什標準(對於熟悉納什的人)。由於在第一個數組中是觀察數據(第二個是模擬結果),所以我有一些NaN。我希望我的程序在忽略第一個數組中的值爲NaN的情況下計算標準。 我試過掩碼方法。它運作良好,如果我只需要處理第一個數組(例如計算其平均值爲例),但不能用於比較兩個數組的值(按值計算)。

任何人都可以提供一些幫助嗎?謝謝!

+3

你可以添加一些代碼並告訴我們問題出在哪裏嗎? –

+0

相關,可能是:[比較numpy數組包含NaN](http://stackoverflow.com/questions/10710328/comparing-numpy-arrays-containing-nan) –

+0

@barak嗯,我有兩個數組obs&sim有誰相同的長度,並且它們的值逐一匹配(對於每個時間步,我都有一個觀測值和一個模擬值)。在obs中,我有一些NaN用於沒有觀察數據的時間步驟。現在我必須計算兩個數組的相關係數,這意味着除了別的以外,我需要計算每個時間步i(obs [i] -sim [i])²。而對於obs [i] = NaN,這個方程將給出NaN。所以我必須忽略obs [i]和sim [i] obs [i] = NaN。但我不知道如何做到這一點,所以我不能顯示任何代碼... – user3306110

回答

0

剛剛回答了類似問題Numpy only on finite entries。您可以用Numpy的isnan函數替換數組中的NaN值,這是處理NaN值的常用方法。

import numpy as np 

replace_NaN = np.isnan(array_name) 
array_name[replace_NaN] = 0 
+1

'np.nan_to_num(array_name)'和你的代碼一樣。 – zhangxaochen

+0

是的,另一個與isnan做同樣的事情。 – user1749431

+0

你好,如果我用0替換NaN,當然我不會再有NaN了。但是我的計算會計算這些0.事實上,NaN最初是我沒有觀測數據的時間步長,所以我必須忽略這些分析步驟。在這種情況下,0是一個值,但是是一個錯誤的值。除了你的意思是我必須爲程序創建一個條件來忽略所有的零? – user3306110