To arrange matrix based off criteria in column

1 view (last 30 days)
Hi i have a 60x2 matrix, with the first column being a number from 1 to 300 (not consecutive), and the second column with locations from 1 to 9. I have attached a picture to show how it looks like and would like to regroup into a new matrix (AB) of 9x____, the rows being the locations (1:9), and the columns being the numbers that have the respective locations i.e. in the first column, if numbers 8, 16 & 52 have a corresponding location 1 in column 2, AB row 1 will be 8,16,52 (1 in each column, total 3 columns). What functions should I use for this/any ideas how to write for this?
Thank you! :)

Accepted Answer

Star Strider
Star Strider on 4 Dec 2019
Try this:
Col1 = randperm(300); % Create Column 1
Col2 = randi(9, 1, 300); % Create Column 2
M = [Col1(:) Col2(:)]; % Create Matrix
Gather = accumarray(M(:,2), M(:,1), [], @(x){x.'}); % Cell Array With Desired Information
AB = {(1:9).', Gather};
That should work. You will need to keep ‘AB’ as a cell array because there are different numbers of columns in each row. You might be able to use a structure to store this information, however I doubt that a table would work correctly.
Experiment to get the result you want.
Star Strider
Star Strider on 4 Dec 2019
As always, my pleasure!
To get the individual rows of ‘AB’:
Row1 = [AB{1}(1) AB{2}{1}]
Row2 = [AB{1}(2) AB{2}{2}]
and so for the rest.

Sign in to comment.

More Answers (0)


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!