MATLAB: How to iteratively split a matrix into multiple matrices according to a condition

matricesmatrixmatrix arraymatrix manipulation

I have a 2 column matrix with many many rows.
It's been sorted according to the values in the first column.
I now want to split the matrix into ten matrices.
Those values in the first column which are 0-10% of the highest value will go in one matrix, those that are 10-20% of the highest value will go in the next… you get the idea.
How would I go about doing this? I presume a for loop is involved, but am struggling to make it work. Any advice would be very much appreciated – thank you!

Best Answer

Assuming values in 1st column are non-negative, you could put the results into a cell array:
M = your matrix
M1 = M(:,1); % 1st column
x = max(M1); % the max value
p = (0:10:100)/100 * x; % the comparison values
p(1) = -1; % Something less than 0 to catch any exact 0 values
result = cell(numel(p)-1,1);
for k=1:numel(p)-1
result{k} = M( M1>p(k) & M1<=p(k+1) , : );
end
Or if you want to "hide" the loop in the background via arrayfun:
result = arrayfun(@(x,y) M( M1>x & M1<=y , : ),p(1:end-1),p(2:end),'uni',false);