在 MATLAB 中按值拆分矩阵

发布于 2024-10-31 14:08:00 字数 252 浏览 0 评论 0原文

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

矩阵是:

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

我想将从 5 开始的行转移到另一个矩阵,以 16 开始的行转移到另一个矩阵,等等。

是否有一个函数可以实现这一点,或者我应该使用 if/for 方法?

I wonder if there is a MATLAB solution to split a matrix into sub matrices like the following:

The matrix is:

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

I would like to take the rows that are starting with 5 to another matrix, those that start with 16 to another, etc..

Is there a function for this or should I go with if/for approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

后eg是否自 2024-11-07 14:08:00

这是一种使用函数 SORTROWS独特ACCUMARRAYMAT2CELL 创建一个元胞数组,每个元胞存储一组第一列中具有相同值的行:

>> 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

Here's one solution that uses the functions SORTROWS, UNIQUE, ACCUMARRAY, and MAT2CELL to create a cell array with each cell storing a set of rows with the same value in the first column:

>> 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
成熟稳重的好男人 2024-11-07 14:08:00

我想我找到了 = )

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

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

I think I found it = )

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

Now M{n} is the matrix of all rows that start with n. = )

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文