我有一個大小爲50,000 x 1的向量中的仿真數據,該向量具有NaN和非NaN。我想平均非NaN,但函數nanmean返回NAN。我嘗試刪除NAN,但我只得到一個零矢量。對矢量的視覺檢查使我懷疑這個矢量的真正意思是真正的NaN。Matlab只返回具有NaN和非NaN的向量中的NAN
此外,我想用這個向量來計算與其他幾個向量(在某個點)的協方差。我的選擇是在Excel中這樣做,這將是痛苦的。
有什麼想法?
謝謝
我有一個大小爲50,000 x 1的向量中的仿真數據,該向量具有NaN和非NaN。我想平均非NaN,但函數nanmean返回NAN。我嘗試刪除NAN,但我只得到一個零矢量。對矢量的視覺檢查使我懷疑這個矢量的真正意思是真正的NaN。Matlab只返回具有NaN和非NaN的向量中的NAN
此外,我想用這個向量來計算與其他幾個向量(在某個點)的協方差。我的選擇是在Excel中這樣做,這將是痛苦的。
有什麼想法?
謝謝
比方說,您的數據存儲在向量A
,你可以把向量的平均排除NaNs
以及通過任何Inf
和-Inf
值:
meanA = mean(A(isfinite(A)));
假設你有一個只包含有限數值的向量,並且這裏和那裏的解決方案非常簡單
nanmean(A)
如果向量中存在非有限值,這應該只會帶來麻煩。 在這種情況下,您可以按照@Ryan的建議過濾它們,但是您需要意識到您實際上並未計算矢量的均值。
問問自己,你是否可以改爲感興趣的東西像
nanmedian(A)
關於協方差和喜歡的計算,假設你有載體v
和w
,那麼我會建議你做某件事像這樣:
idx = isfinite(v) & isfinite(w);
cov(v(idx),w(idx))
這也返回NaN。這是否意味着我的矢量的真正平均值真的是NaN?我很難相信這是事實。 – 2013-05-01 00:16:48
這段代碼會挑出所有不是NaN的元素,所以如果你仍然得到NaN結果,那麼你的向量不包含有限元素。如果你嘗試'size(A(〜isnan(A)))',會發生什麼? – craigim 2013-05-01 00:22:13
如果你的向量出於某種原因包含'Inf'以及'-Inf','NaN'的去除仍然會導致平均值爲'NaN'。如果「Inf」和「-Inf」相加,則產生「NaN」。 – 2013-05-01 00:26:25