grouping numbers in matrix

5 Ansichten (letzte 30 Tage)
Cside
Cside am 23 Okt. 2019
Kommentiert: Akira Agata am 23 Okt. 2019
Hi, I have 2 matrices
A = [ 1, 2, 3, 2, 2, 3, 3, 1, 1]
B = [34, 20, 23, 31, 30, 33, 44, 22, 28]
and would like to group them according to their numbers in A. The answer should be a 3 x 3 matrix (A corresponds to column number).
Thank you! :)

Akzeptierte Antwort

Akira Agata
Akira Agata am 23 Okt. 2019
More generalized solution would be:
C = splitapply(@(x){x'}, B, A);
If each group has the same number of elements, the following can generate 2D matrix.
B2 = cell2mat(C);
  2 Kommentare
Cside
Cside am 23 Okt. 2019
Bearbeitet: Cside am 23 Okt. 2019
Hi Akira,
Could you break down/explain the first code? Am a new matlab learner :) Also for cell2mat, is there another shortcut i can use to group if they do not have the same number of elements? (I still want the 2D matrix)
Akira Agata
Akira Agata am 23 Okt. 2019
Hi Charms-san,
Thank you for your response.
Yes, splitapply is somehow "tricky" function. But, at the same time, this is quite useful and powerful function. So I would recommend accessing the following documentation page. I believe the "Example" section will be useful to uderstand how splitapply works!
Regarding the second question, I believe padding with 'NaN' or something will be needed to adjust number of elements for each group and make the 2D matrix, when they do not have the same number of elements.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Daniel M
Daniel M am 23 Okt. 2019
This is not a generalized solution, and assumes that there will always be three entries of each number (1, 2, 3) in A.
[~,sortOrder] = sort(A);
B2 = reshape(B(sortOrder),3,3)';

Kategorien

Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by