2012-11-11 168 views
0

我有一個950000x1值的數組,例如[1e15 2.5e12 ...etc]。但是當我按照以下步驟獲得平均值時,我的值爲NaN查找matlab中的平均值

avg=mean(g1) 

我不明白爲什麼我得到這個錯誤。

回答

2

下面的代碼運行在我的機器(睿i7處理器,16GB內存,Linux Mint的V12,MATLAB 2012B)的罰款:

T = 1e9; 
Vec = ones(T, 1) * 1e200; 
M = mean(Vec); 

這表明我自己的價值觀的數組包含NaN地方。請注意,即使您的數組包含的數字大於雙浮點數可以處理的數量(即大約1e320左右的數字),那麼mean函數將返回Inf而不是NaN

嘗試any(isnan(Vec))在您的陣列上。如果它返回1,那麼你會知道它包含一個NaN。如果是這樣,那麼下面的代碼將刪除NaN。

Vec(isnan(Vec)) = []; 

如果您認爲這已解決您的查詢,請隨時單擊我的答案旁邊的勾號。乾杯!

+0

不,我已經很好地搜索,沒有NaN –

+0

@RohanChakrabarty有趣。好吧,下一步,你可以嘗試在調試模式下運行你的代碼。具體來說,嘗試通過'mean'函數(使用f10和f11鍵)一行一行地查看NaN出現的位置,然後在問題中發佈結果?在調用「mean」之前,可以通過在代碼中設置斷點來啓動調試模式。 –

+0

是的,它返回一個南,你可以指導我如何刪除這些值,即將其更改爲0 –

1

不是查詢mean函數之前去除NaN S的,可以只使用nanmean,calcuting平均時忽略NaN值:

nanmean

Y = nanmean(X)是平均數X,在移除NaN值後計算。

它也適用於矩陣,如果您刪除NaN s,它也不起作用。

+0

+1非常酷 - 我不知道這個功能是否存在。 –