Vectorizing for loop for faster processing

2 views (last 30 days)
I have a column of sorted row numbers labelled "Row Numbers"
Row Numbers =
1
3
5
8
100
...
...
I want to use information from Row numbers to sort a table labbeled "Table" into different sections
Table =
Time SensorOut
1:00 1
2:00 3
3:00 2.3
4:00 3.4
5:00 3.1
6:00 30
7:00 3
8:00 3
9:00 3
... ...
... ...
... ...
What i want to achieve is this
Table =
Time SensorOut Section
1:00 1 1
2:00 3 1
3:00 2.3 2
4:00 3.4 2
5:00 3.1 3
6:00 30 3
7:00 3 3
8:00 3 3
9:00 3 4
... ... ...
... ... ...
... ... ...
What i have done so far
for i = 1:length(rownumbers)-1
Table.Section(rownumbers(i):rownumbers(i+1)) = i;
end
This works but the issue is that i have 100,000 rows of data and each loop is taking about 0.4 seconds. I was wondering if any one had an idea how to vectorize this for loop for faster processing? Or a more clever way of achiveing this?

Accepted Answer

AndresVar
AndresVar on 10 Mar 2022
Edited: AndresVar on 10 Mar 2022
You defined bin edges so you can try discretize: Group data into bins or categories - MATLAB discretize (mathworks.com)
idx=1:10
idx = 1×10
1 2 3 4 5 6 7 8 9 10
rowNums=[1 3 5 8 inf]
rowNums = 1×5
1 3 5 8 Inf
discretize(idx,rowNums)'
ans = 10×1
1 1 2 2 3 3 3 4 4 4

More Answers (0)

Categories

Find more on Matrices and Arrays 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!