0
我正在处理尺寸不一致的高维数组,但都包含6维以上,最后3个代表XYZ中的三维空间。对于每个x,y,z索引,我希望计算该索引的平均值,并折叠到所有其他维度上。我正在使用矢量来在嵌套的for循环中收集这些值,并对它们进行平均,如下面的一组代码片段('betas'是所讨论的多维数组):Matlab:平均多维矩阵单元的最优方法
首先,获取测试版的维数
betasdim=size(betas);
计算三维空间的大小以及我需要折叠的维数。 betasdim的最后3个维度是XYZ:
voxdim=betasdim(length(betasdim)-2:length(betasdim));
其他的一切都是尺寸崩溃了
otherdims=betasdim(1:length(betasdim)-3);
多少维度被崩溃了?
numdims=length(otherdims);
Ceate坍塌在比XYZ其他所有维度冒号的矢量:
dimwildcard=repmat({':'}, 1, numdims);
初始化均值矩阵
meanbetas=repmat([NaN],voxdim);
而现在可能低效for循环溶液:
for x=1:voxdim(1)
for y=1:voxdim(2)
for z=1:voxdim(3)
voxbetas=betas(dimwildcard{:},x,y,z);%get all beta values for this xyz
voxbetas=reshape(voxbetas,1, numel(voxbetas));%reshape to vector
meanbetas(x,y,z)=nanmean(voxbetas); %average the vector and store in new array
end
end
end
记住,我需要从每个索引的nanmean()获取单个值,除了遍历每个x,y,z的值之外是否有更快的解决方案?