用matlab根据列拆分矩阵.

Fan*_*ill 3 matlab split matrix

A = [1,4,2,5,10
     2,4,5,6,2
     2,1,5,6,10
     2,3,5,4,2]
Run Code Online (Sandbox Code Playgroud)

我想通过最后一列A - > B和C将它分成两个矩阵

B =  [1,4,2,5,10
      2,1,5,6,10]
C = [2,4,5,6,2
     2,3,5,4,2]
Run Code Online (Sandbox Code Playgroud)

此外,该方法可以应用于大矩阵,如矩阵100*22,根据最后一列值通过matlab分为9组.

Moh*_*nia 5

使用逻辑索引

B=A(A(:,end)==10,:);
C=A(A(:,end)==2,:);
Run Code Online (Sandbox Code Playgroud)

回报

>> B
B =
     1     4     2     5    10
     2     1     5     6    10

>> C
C =
     2     4     5     6     2
     2     3     5     4     2
Run Code Online (Sandbox Code Playgroud)

编辑:在回复丹的评论这里是一般情况的扩展

e = unique(A(:,end));
B = cell(size(e));
for k = 1:numel(e)
    B{k} = A(A(:,end)==e(k),:);
end
Run Code Online (Sandbox Code Playgroud)

或者更紧凑的方式

B=arrayfun(@(x) A(A(:,end)==x,:), unique(A(:,end)), 'UniformOutput', false);
Run Code Online (Sandbox Code Playgroud)

因此对于

A =
     1     4     2     5    10
     2     4     5     6     2
     2     1     5     6    10
     2     3     5     4     2
     0     3     1     4     9
     1     3     4     5     1
     1     0     4     5     9
     1     2     4     3     1
Run Code Online (Sandbox Code Playgroud)

你得到单元格数组元素的矩阵 B

>> B{1}
ans =
     1     3     4     5     1
     1     2     4     3     1

>> B{2}
ans =
     2     4     5     6     2
     2     3     5     4     2

>> B{3}
ans =
     0     3     1     4     9
     1     0     4     5     9

>> B{4}
ans =
     1     4     2     5    10
     2     1     5     6    10
Run Code Online (Sandbox Code Playgroud)