Effacer les filtres
Effacer les filtres

Can this for-loop be vectorized?

2 vues (au cours des 30 derniers jours)
Niek Blikslager
Niek Blikslager le 15 Nov 2020
Commenté : Niek Blikslager le 15 Nov 2020
I want to find the moments of footfalls on a forceplate. I first find the peaks in the GRF, and all the valleys in between each step:
[~,locs]=findpeaks(f,'minpeakheight',1000,'minpeakdistance',50);
[~,locs2]=findpeaks(-f,'minpeakheight',-10);
Now I find the last valley before each peak, in order to determine when the force peak of a foot step starts.
for i = 2 : length(locs) - 1
steps(i-1) = max( locs2(locs2>locs(i-1) & locs2<locs(i)) );
end
Is it possible to change this loop into (short) vectorized code? I have to run this loop often, which takes time.
Thanks!

Réponse acceptée

Bruno Luong
Bruno Luong le 15 Nov 2020
Modifié(e) : Bruno Luong le 15 Nov 2020
u = setdiff(locs2,locs);
% if locs2 is sorted and does not intersect with locs
% you can replace u by locs2
steps = interp1(u,u,locs(2:end-1),'previous')
  1 commentaire
Niek Blikslager
Niek Blikslager le 15 Nov 2020
Thank you! This is very usefull

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by