Function faster than find?
4 views (last 30 days)
Show older comments
I use the find command compare 2 vectors of time, one with a much higher rate than the other. Say vector1=[1 2 3 4 5], vector2 many be [1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.2 2.3 3.1...], but vector2 has an irregular pattern.
What I want to do is find the number of values of vector2 that occur between each point of vector1. So betweem 1 and 2 of vector1, I have 9 values (1.1-1.9). I also want the index of the first value (1.1) which would be 1.
For the second case, between 2 and 3 of vector1, I have 2 values, and the index of the first of those values is 10.
I use the following code to do this:
for i=1:length(vector1)-1
index=find(vector1(i)<=vector2 & vector2<vector1(i+1),1,'first');
count=length(find(vector1(i)<=vector2 & vector2<vector1(i+1)));
end
This turns out to be extremely slow with typical vector lengths of vector1 around 200,000 and vector2 of 1,500,000.
Any tips on ways to speed this up, or another function? Another way to look at it is vector1 is providing the bins, and vector2 has the values that fall in each bin. I want the number in each bin, and the index of the first value in each bin. I tried histc but wasn't happy with how it was working.
0 Comments
Answers (1)
See Also
Categories
Find more on Installation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!