3

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

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

4

3 回答 3

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),依此类推。

于 2013-07-26T17:43:51.770 回答
1

最好arrayfun用于这种东西。假设您的原始数据位于matrix.

创建一个 3 维索引向量以arrayfun供使用:

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

使用arrayfun,不幸的是,我们必须指定结果UniformOutputfalse哪个导致单元格数组。

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

将元胞数组转换为 3 维矩阵:

result=cell2mat(resultcell);
于 2013-07-26T18:44:31.097 回答
1

assuming that your data are stored in the variable old_data and you need a result in new_data, this sample code can be used.

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
于 2013-07-26T17:37:54.773 回答