我有一个包含五个3x4切片的三维数组,定义如下:
rng(3372061);
M = randi(100,3,4,5);
我希望能够收集关于数组的一些统计数据:
- 每列中的最大值。
- 每行中的平均值。
- 每个切片内的标准差。
使用循环来完成这个任务非常简单,
sz = size(M);
colMax = zeros(1,4,5);
rowMean = zeros(3,1,5);
sliceSTD = zeros(1,1,5);
for indS = 1:sz(3)
sl = M(:,:,indS);
sliceSTD(indS) = std(sl(1:sz(1)*sz(2)));
for indC = 1:sz(1)
rowMean(indC,1,indS) = mean(sl(indC,:));
end
for indR = 1:sz(2)
colMax(1,indR,indS) = max(sl(:,indR));
end
end
但我不确定这是否是解决问题的最佳方法。
我在 max
,mean
和 std
的文档中发现了一个常见的模式,它们允许指定额外的 dim
输入。例如,在 max
中:
M = max(A,[],dim)
返回沿着维度dim
的最大元素。例如,如果A
是一个矩阵,则max(A,[],2)
是包含每行最大值的列向量。
如何使用这种语法简化我的代码?