[英]how to find mean on first dimension of 4D array in matlab?
我有一个尺寸为(122,169,137,16)的4D数组,其中122是天,分别是169和137 lat长,而16是年。 我必须找到每年平均122天。 我尝试过这样的事情:
for i=1:122
for j=1:16
c=t1(i,:,:,j)
d=mean(c(:));
end
end
但它说Index超出了矩阵尺寸。
我是Matlab的新手。 您能建议我简单的方法吗?
看来t1
是输入4D数组。 您需要使用permute
来重新排列输入数组的尺寸,以使第四个尺寸成为新的第二个尺寸。 然后,将其整形为3D数组,以使第3维的每个切片都包含所有要计算平均值的元素。 因此,代码看起来像这样-
mean(reshape(permute(t1,[1 4 2 3]),size(t1,1),size(t1,4),[]),3)
如果你想避免permute
性能,第二个办法是-
[n1,n2,n3,n4] = size(t1);
output = reshape(mean(reshape(t1,[],n2*n3,n4),2),n1,n4)
在第二种方法中,我们不重新安排尺寸。 相反,我们将第二和第三个维度合并为第二个维度,沿着第二个维度获取均值,最后对其进行重塑以使其与所需结果的大小相匹配。
您也可以使用squeeze
来避免外部重塑-
squeeze(mean(reshape(t1,[],n2*n3,n4),2))
我不确定您是在寻找天数的平均值还是其他值的平均值。 假设您要寻找平均时间。 因此,您可以了解一种简单的方法:
for i=1:16 % for each year (instead of 16 you can use size(t1,4))
c = t1(:,1,1,i); % extract the days, making c a matrix sized [122,1,1,1]
cr = reshape(c,[122,1]); % remove the excess dimensions to make [122,1] (might be unnecessary)
d(i) = mean(cr); % compute the mean and store results into d
end
结果d是16个元素的向量,包含每年的平均天数。
关于您的代码:
您可以使用以下事实:对于2D矩阵, X
, mean(X(:))
与mean(mean(X,1), 2)
并使用
d = squeeze(mean(mean(C,2),3));
它首先在第二维上取平均值,然后在第三维上取平均值,从而得出尺寸为122 x 1 x 1 x 16
的矩阵。 然后squeeze
其转换成大小的矩阵122 x 16
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.