如何沿矩阵的第三维平均每 4 个数据点?
我的矩阵是 245x85x1460(lonxlatxhour)。由于第 3 维是 6 小时数据并且我想要每日数据,因此我想平均每 4 个数据点(即 1:4、5:8 等)并最终得到一个大小为 245x85x365 的矩阵。
如何沿矩阵的第三维平均每 4 个数据点?
我的矩阵是 245x85x1460(lonxlatxhour)。由于第 3 维是 6 小时数据并且我想要每日数据,因此我想平均每 4 个数据点(即 1:4、5:8 等)并最终得到一个大小为 245x85x365 的矩阵。
最好arrayfun
用于这种东西。假设您的原始数据位于matrix
.
创建一个 3 维索引向量以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);
将元胞数组转换为 3 维矩阵:
result=cell2mat(resultcell);
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