2013-06-19 324 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))我想是否有窍门。