【问题标题】:Split a matrix by value in MATLAB在 MATLAB 中按值拆分矩阵
【发布时间】:2015-04-25 16:10:55
【问题描述】:

我想知道是否有 MATLAB 解决方案可以将矩阵拆分为子矩阵,如下所示:

矩阵是:

A =
16     2    3
5      11   10
9      7    6
4      14   15
5      1    3

我想以 5 开头的行到另一个矩阵,以 16 开头的行到另一个矩阵,等等。

有这个功能还是我应该使用 if/for 方法?

【问题讨论】:

  • Matlab 应该在可能的情况下始终使用矢量运算进行编程,但我看不出有办法绕过 forif 是这种情况

标签: matlab matrix split


【解决方案1】:

这是一个解决方案,它使用函数SORTROWSUNIQUEACCUMARRAYMAT2CELL 创建一个元胞数组,每个元胞在第一列中存储一组具有相同值的行:

>> sortedA = sortrows(A,1);  %# Sort the rows by the first column
>> [~,~,uniqueIndex] = unique(sortedA(:,1));  %# Find indices of unique values
                                              %#   in the first column
>> cellA = mat2cell(sortedA,...                       %# Break matrix up by rows
                    accumarray(uniqueIndex(:),1),3);  %#   into a cell array
>> cellA{:}  %# Display the contents of the cells

ans =

     4    14    15

ans =

     5    11    10
     5     1     3

ans =

     9     7     6

ans =

    16     2     3

【讨论】:

    【解决方案2】:

    我想我找到了 = )

    for n=1:max(max(A))
    M{n} = A(find(A(:,1)==n),:);
    end
    

    现在M{n} 是所有以n 开头的行的矩阵。 = )

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多