MATLAB: How to efficiently match the zeros of 1 matrix with another

MATLABmatrix manipulation

Hello, I am solving an inverse problem through simulated annealing, but the loop I use to match the zeros of my data with zeros in my model (so that the inversion is only solved for non-zero elements of data) is making my code very inefficient.
D is the data matrix of dimensions 26x12x160 with many zeros
S is my model, it has the same dimensions, I want it to have zeros where D has zeros
I am using the following loop for this
for i=1:length(D(:,1,1))
for j=1:length(D(1,:,1))
for k=1:length(D(1,1,:))
if D(i,j,k)==0
S(i,j,k)=0;
end
end
end
end
Is there a more efficient way to do this? Maybe a way to kill 1 loop? I am very inexperienced with efficient coding…
Thanks in advance

Best Answer

If D and S are your matrices of size 26*12*160. To repalce zeros in S where D is zero, simply use:
idx = D ==0 ; % get indices in A where it has values 0
S(idx) = 0 ; % repalce the indices with 0