2013-04-30 154 views
0

我有一個大小爲50,000 x 1的向量中的仿真數據,該向量具有NaN和非NaN。我想平均非NaN,但函數nanmean返回NAN。我嘗試刪除NAN,但我只得到一個零矢量。對矢量的視覺檢查使我懷疑這個矢量的真正意思是真正的NaN。Matlab只返回具有NaN和非NaN的向量中的NAN

此外,我想用這個向量來計算與其他幾個向量(在某個點)的協方差。我的選擇是在Excel中這樣做,這將是痛苦的。

有什麼想法?

謝謝

回答

7

比方說,您的數據存儲在向量A,你可以把向量的平均排除NaNs以及通過任何Inf-Inf值:

meanA = mean(A(isfinite(A))); 
+0

這也返回NaN。這是否意味着我的矢量的真正平均值真的是NaN?我很難相信這是事實。 – 2013-05-01 00:16:48

+0

這段代碼會挑出所有不是NaN的元素,所以如果你仍然得到NaN結果,那麼你的向量不包含有限元素。如果你嘗試'size(A(〜isnan(A)))',會發生什麼? – craigim 2013-05-01 00:22:13

+0

如果你的向量出於某種原因包含'Inf'以及'-Inf','NaN'的去除仍然會導致平均值爲'NaN'。如果「Inf」和「-Inf」相加,則產生「NaN」。 – 2013-05-01 00:26:25

0

假設你有一個只包含有限數值的向量,並且這裏和那裏的解決方案非常簡單

nanmean(A) 

如果向量中存在非有限值,這應該只會帶來麻煩。 在這種情況下,您可以按照@Ryan的建議過濾它們,但是您需要意識到您實際上並未計算矢量的均值。

問問自己,你是否可以改爲感興趣的東西像

nanmedian(A) 

關於協方差和喜歡的計算,假設你有載體vw,那麼我會建議你做某件事像這樣:

idx = isfinite(v) & isfinite(w); 
cov(v(idx),w(idx))