How to efficiently match the zeros of 1 matrix with another

1 次查看(过去 30 天)
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

采纳的回答

KSSV
KSSV 2020-10-27
编辑:KSSV 2020-10-27
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

更多回答(1 个)

Bruno Luong
Bruno Luong 2020-10-27
编辑:Bruno Luong 2020-10-27
The 3 for-loops can be shrink down to
S(D==0) = 0;

类别

Help CenterFile Exchange 中查找有关 Problem-Based Optimization Setup 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by