Create n matrix from one matrix according to elements of a column?

1 Ansicht (letzte 30 Tage)
I have a sorted matrix (according to the element of the third column)
A = [ 4 2 0 ;3 7 0 ; 8 9 3 ; 7 5 3; 4 4 3]
I want to get n matrix (in this case 2) from A, according to the value of the element of the third column, to get
M1 = [ 4 2 0 ; 3 7 0]
M2 = [8 9 3 ; 7 5 3; 4 4 3].
I know how many matrix I will have and the different elements to study using the function 'unique' that provide me a matrix (for this case) B=[0;3].
I tried with the functions 'genvarname' and 'eval' but I didn't find a good solution.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 15 Apr. 2016
Bearbeitet: Andrei Bobrov am 15 Apr. 2016
[~,~,c] = unique(A(:,end));
M = accumarray(c,(1:size(A,1))',[],@(x){A(x,:)});
  2 Kommentare
Sleh Eddine Brika
Sleh Eddine Brika am 15 Apr. 2016
It's so wonderful thank you !A really interesting command, but I really need to get separated Matrix and do you know how to dynamically generate matrix name

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Azzi Abdelmalek
Azzi Abdelmalek am 15 Apr. 2016
A = [ 4 2 0 ;3 7 0 ; 8 9 3 ; 7 5 3; 4 4 3]
[ii,jj,kk]=unique(A(:,3))
out=accumarray(kk,1,[],@(x) {A(x,:)})
% the first matrix and the second are
out{1}
out{2}
  3 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 15 Apr. 2016
@Sleh Eddine, it's easier to call your matrices with one variable and indices: out{1}, out{2},... then using multiple variables!
Sleh Eddine Brika
Sleh Eddine Brika am 16 Apr. 2016
Ok, I will do it like you said ,thank you very much for your help Mr Azzi

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements 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