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

1 次查看(过去 30 天)
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.

采纳的回答

Andrei Bobrov
Andrei Bobrov 2016-4-15
编辑:Andrei Bobrov 2016-4-15
[~,~,c] = unique(A(:,end));
M = accumarray(c,(1:size(A,1))',[],@(x){A(x,:)});
  2 个评论
Sleh Eddine Brika
Sleh Eddine Brika 2016-4-15
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

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2016-4-15
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 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2016-4-15
@Sleh Eddine, it's easier to call your matrices with one variable and indices: out{1}, out{2},... then using multiple variables!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by