Can this for-loop be vectorized?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Niek Blikslager
am 15 Nov. 2020
Kommentiert: Niek Blikslager
am 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 Kommentare
Akzeptierte Antwort
Bruno Luong
am 15 Nov. 2020
Bearbeitet: Bruno Luong
am 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')
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!