일관성없는 차원을 가진 고차원 배열을 사용하고 있지만 모두 6+ 차원을 포함하고 있고 마지막 3 개는 XYZ의 3D 공간을 나타냅니다. 각 x, y, z 인덱스에 대해 다른 모든 차원에서 축소되어 해당 인덱스의 평균값을 계산하고자합니다. 나는 현재 벡터를 사용하여 중첩 된 for-loops 내에서 이러한 값을 수집하고 다음 코드 조각 ('베타'는 문제의 다차원 배열)에서와 같이 평균화합니다.Matlab : 다차원 매트릭스 셀을 평균화하는 최적의 방법
먼저 베타 크기
betasdim=size(betas);
3D 공간의 크기와 축소해야하는 크기의 수를 계산합니다. 다른
voxdim=betasdim(length(betasdim)-2:length(betasdim));
모든 것은 차원이
이상 붕괴되고 얼마나 많은 차원otherdims=betasdim(1:length(betasdim)-3);
이상 축소됩니다 betasdim의 마지막 3 차원 XYZ입니까?
numdims=length(otherdims);
Ceate 모든 XYZ 이외 치수 이상의 붕괴 콜론의 벡터 :
dimwildcard=repmat({':'}, 1, numdims);
는 초기화 평균 행렬
meanbetas=repmat([NaN],voxdim);
이제 아마도 비효율적 용 루프 용액 :
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의 각 값을 반복하는 것 외에 다른 빠른 해결책이 있습니까?