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的值之外是否有更快的解決方案?