Поскольку и A, и B имеют одинаковый размер, я предполагаю, что вам нужно поэлементное деление ./
%Some random test data
A=rand(3,4,5);
B=rand(size(A));
I=zeros(size(A));
for d2=1:size(I,2)
for d3=1:size(I,3)
I(:,d2,d3)=randperm(size(I,1));
end
end
%end of test data
%Second and third dimension are to be indexed directly, use ind2sub to genertae matching indices
[~,I2,I3]=ind2sub(size(A),1:numel(A));
%Generate a linear index, which does "I(x,y,z),y,z"
LI=sub2ind(size(A),I(:),I2(:),I3(:));
%Make the index the right shape:
LI=reshape(LI,size(A));
%Now linear indexing can be used to permute A and B in the intended way.
C=A(LI)./B(LI);
Для дальнейшего улучшения производительности вы можете:
- Замените строку
ind2sub
некоторым выражением repmat. - Сделайте "C = A / B, C = C (I)". Который будет
C2=A./B;C2=C2(LI);
Я думаю, что оба улучшат производительность, но, выполняя некоторые другие вычисления, я не могу ничего отметить в данный момент.