沿第3维度平均每4个条目

时间:2013-07-26 17:22:54

标签: matlab multidimensional-array average mean

如何沿矩阵的第3维平均每4个数据点?

我的矩阵是245x85x1460(lonxlatxhour)。由于第3维是6小时数据而且我想要每日数据,我想平均每4个数据点(即1:4,5:8等)并最终得到一个大小为245x85x365的矩阵。

3 个答案:

答案 0 :(得分:4)

使用reshape

R = rand(245,85,1460); % Some random data, same dimensions as your example
szR = size(R);
A = squeeze(mean(reshape(R,[szR(1:2) 4 szR(3)/4]),3)); % Mean across 3rd dimension

需要squeeze函数将结果推回到三维数组。上面的A(:,:,1)应该等同于mean(R(:,:,1:4),3),依此类推。

答案 1 :(得分:1)

假设您的数据存储在变量old_data中并且您需要new_data中的结果,则可以使用此示例代码。

new_data=zeros(245,85,365);
for k=0,364
  new_data(:,:, k+1) = sum(old_data(:,:,4*k+1:4*k+4), 3)/4
end

答案 2 :(得分:1)

最好将arrayfun用于此类内容。让我们假设您的原始数据位于matrix

arrayfun创建一个使用的三维索引向量:

index3d=zeros(1,1,size(matrix,3)/4);
index3d(1,1,:)=(1:size(matrix,3)/4);

使用arrayfun,遗憾的是,我们必须将UniformOutput指定为false,这会导致单元格数组生效。

resultcell=arrayfun(@(x) mean(matrix(:,:,4*x-3:4*x), 3), index3d,'UniformOutput',false);

将单元格数组转换为三维矩阵:

result=cell2mat(resultcell);