Can this for-loop be vectorized?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/414608/image.png)
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!
0 commentaires
Réponse acceptée
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')
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!