我有一個950000x1
值的數組,例如[1e15 2.5e12 ...etc]
。但是當我按照以下步驟獲得平均值時,我的值爲NaN
。查找matlab中的平均值
avg=mean(g1)
我不明白爲什麼我得到這個錯誤。
我有一個950000x1
值的數組,例如[1e15 2.5e12 ...etc]
。但是當我按照以下步驟獲得平均值時,我的值爲NaN
。查找matlab中的平均值
avg=mean(g1)
我不明白爲什麼我得到這個錯誤。
下面的代碼運行在我的機器(睿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)) = [];
如果您認爲這已解決您的查詢,請隨時單擊我的答案旁邊的勾號。乾杯!
不是查詢mean
函數之前去除NaN
S的,可以只使用nanmean
,calcuting平均時忽略NaN
值:
Y = nanmean(X)是平均數X,在移除NaN值後計算。
它也適用於矩陣,如果您刪除NaN
s,它也不起作用。
+1非常酷 - 我不知道這個功能是否存在。 –
不,我已經很好地搜索,沒有NaN –
@RohanChakrabarty有趣。好吧,下一步,你可以嘗試在調試模式下運行你的代碼。具體來說,嘗試通過'mean'函數(使用f10和f11鍵)一行一行地查看NaN出現的位置,然後在問題中發佈結果?在調用「mean」之前,可以通過在代碼中設置斷點來啓動調試模式。 –
是的,它返回一個南,你可以指導我如何刪除這些值,即將其更改爲0 –