如何沿矩阵的第3维平均每4个数据点?
我的矩阵是245x85x1460(lonxlatxhour)。由于第3维是6小时数据而且我想要每日数据,我想平均每4个数据点(即1:4,5:8等)并最终得到一个大小为245x85x365的矩阵。
答案 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);