MATLAB: How to avoid repetition

3d matrixrepetition

I have this code here and it does what I want it to do just fine. however theres a lot of repetition. I was wondering if there was a way to make it better, maybe even remove the for loop?
A = randi(10,5,5,5);
B = randi(4,5,5);
C = zeros(4,1,5);
layer1 = A(:,:,1); %separate 3rd dimension
layer2 = A(:,:,2);
layer3 = A(:,:,3);
layer4 = A(:,:,4);
layer5 = A(:,:,5);
for i = 1:4
value = B == i; %create a logical index for values from 1-4 in B
C(i,:,1) = mean(layer1(value));
C(i,:,2) = mean(layer2(value));
C(i,:,3) = mean(layer3(value));
C(i,:,4) = mean(layer4(value));
C(i,:,5) = mean(layer5(value));
end

Best Answer

One easy solution based on accumarray:
S = size(A);
[~,Y,Z] = ndgrid(1:S(1),1:S(2),1:S(3));
Y(:) = 1;
X = [repmat(B(:),S(3),1),Y(:),Z(:)];
C2 = accumarray(X,A(:),[],@mean)
And tested:
>> isequal(C2,C)
ans = 1