Azzera filtri
Azzera filtri

How to vectorize this code with logical idexing

1 visualizzazione (ultimi 30 giorni)
Hi all,
I have the following code, how can I avoid the for to make it faster?
a=[10:5:50];
b=[10:20:50];
c=rand(size(a));
for i=length(b)-1
d=c(a>=b(i) & a<b(i+1));
end
thanks
cheers
  1 Commento
Jos (10584)
Jos (10584) il 15 Mag 2014
Since you're only storing the last values of d in each iteration, you can skip the for-loop completely:
i = length(b)-1
d = c(a>=b(i)) & a<b(i+1))
but I am pretty sure you intend to do something else.
What should happen with the values of d obtained in the iterations 1 to length(b)-2?

Accedi per commentare.

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 14 Mag 2014
Modificato: Andrei Bobrov il 15 Mag 2014
a=[10:5:50];
b=[10:20:50];
c=rand(size(a));
[~,ii] = histc(a,b);
d = accumarray(ii(:),c(:),size(b(:)),@(x){x})
  3 Commenti

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by