To arrange matrix based off criteria in column

1 vue (au cours des 30 derniers jours)
Cside
Cside le 4 Déc 2019
Commenté : Star Strider le 4 Déc 2019
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! :)
ferfw.JPG

Réponse acceptée

Star Strider
Star Strider le 4 Déc 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.
  2 commentaires
Cside
Cside le 4 Déc 2019
Thanks star strider! Played around with it and got it :)
Star Strider
Star Strider le 4 Déc 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.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by