Azzera filtri
Azzera filtri

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

1 visualizzazione (ultimi 30 giorni)
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.

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 15 Apr 2016
Modificato: Andrei Bobrov il 15 Apr 2016
[~,~,c] = unique(A(:,end));
M = accumarray(c,(1:size(A,1))',[],@(x){A(x,:)});
  2 Commenti
Sleh Eddine Brika
Sleh Eddine Brika il 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

Accedi per commentare.

Più risposte (1)

Azzi Abdelmalek
Azzi Abdelmalek il 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 Commenti
Azzi Abdelmalek
Azzi Abdelmalek il 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 il 16 Apr 2016
Ok, I will do it like you said ,thank you very much for your help Mr Azzi

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by