2013-06-19 322 views
0

我有一個(244,800,4)矩陣作爲.mat文件。有在每個層中的NaN。我怎樣才能把每本層的平均值。如何在Matlab中取三維矩陣的平均值

所以基本上我需要每層的一個平均值(整個圖層)。

感謝

+0

到目前爲止您提出了什麼?你有沒有嘗試過任何代碼?請定義「圖層」?哪個維度? – ClojureMostly

+0

我做了這樣的事 'PAR = mean(PAR(〜isnan(PAR(:1:1))));' 這給了我第一層的正確平均值,但是當我想切換到下一層 'PAR = mean(PAR(〜isnan(PAR(:2:))));' 它給我NaN而不是任何實數值 – FlyingMGET

+0

可能的重複[以NaN的矩陣的平均值Matlab](http://stackoverflow.com/questions/14694706/taking-the-mean-of-a-matrix-with-nans-in-matlab) –

回答

-1

我們發現一個簡單的方法的問題

for ii=1:4 
a=reshape(PAR(:,:,ii),1,[]); 
b(ii)=nanmean(a); 
end 

我用了重塑命令。 感謝佐治亞理工學院的Hanif Hosseini。

+0

我已經給了你一個更好的方法:'nanmean(reshape(PAR,[],size(PAR,3)))' – paddy

-1

mean(mean(matrixName))會給你在矩陣中的每個「層」的平均的1x1x4矩陣。您可能需要做一些事情來,雖然去掉NaN的。

+0

這是一個很好的方法,但我平均兩次,所以它介紹一些錯誤進入計算。 – FlyingMGET

0

我用nanmean這一點,但它的統計工具箱的一部分。如果你沒有,你需要推出自己的。

你可以將你的圖層分割成一個單元格數組,並在每個數組上刪除NAN值。事情是這樣的:

Mcells = arrayfun(@(x) M(:,:,x), 1:size(M,3), 'uni', false); 
Mmeans = cellfun(@(x) mean(x(~isnan(x(:)))), Mcells); 
+3

請注意''nanmean'也可以在[NaN Suite](http://www.mathworks.com/matlabcentral/fileexchange/6837-nan-suite)的MATLAB文件交換中找到。並不是說他們的實施是一樣的。 –

+0

啊,很好。乾杯。 – paddy

+0

我有'nanmean'包,但是,我不知道如何將它指向每個單獨的圖層。無論如何,我不認爲它可以。 – FlyingMGET

2

nanmean(nanmean(matrixname))我想是否有竅門。