How to efficiently match the zeros of 1 matrix with another

1 vue (au cours des 30 derniers jours)
Pablo Aravena
Pablo Aravena le 27 Oct 2020
Modifié(e) : KSSV le 27 Oct 2020
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

Réponse acceptée

KSSV
KSSV le 27 Oct 2020
Modifié(e) : KSSV le 27 Oct 2020
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

Plus de réponses (1)

Bruno Luong
Bruno Luong le 27 Oct 2020
Modifié(e) : Bruno Luong le 27 Oct 2020
The 3 for-loops can be shrink down to
S(D==0) = 0;

Catégories

En savoir plus sur Problem-Based Optimization Setup dans Help Center et File Exchange

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by