对于矩阵 A(4 行,1000 列)。我想对矩阵 A 的第三行具有相同值的列进行分组。所以我必须有第三行包含相同值的子矩阵。

例如:

如果:

A =

     1     4     5     2     2     2     2     1     1     5
     1     4     5     4     4     2     2     4     5     2
     3     3     3     3     4     1     3     5     3     4
     4     5     5     5     4     1     5     5     5     5

然后
A1 =

     1     4     5     2     2     1
     1     4     5     4     2     5
     3     3     3     3     3     3
     4     5     5     5     5     5

A2 =

     2     5
     4     2
     4     4
     4     5

A3 =

     2
     2
     1
     1

结果可以是单元格的形式。

最佳答案

您可以使用 ACCUMARRAY 在一行中进行分配:

A = [1     4     5     2     2     2     2     1     1     5;
     1     4     5     4     4     2     2     4     5     2;
     3     3     3     3     4     1     3     5     3     4;
     4     5     5     5     4     1     5     5     5     5
     ];

out = accumarray(A(3,:)', (1:size(A,2)), [], @(x){A(:,x)} );

这样,out{i} 包含 A 的所有列,其中 A 的第三行等于 i(如果没有有效列,则为空)。

如果您希望 out{i} 包含与 A 的第三行中第 i 个最小唯一值对应的列,您可以首先使用统计工具箱中的 GRP2IDX :
[idx,correspondingEntryInA] = grp2idx(A(3,:)'); %'#
out = accumarray(idx, (1:size(A,2)), [], @(x){A(:,x)} );

这里, out{i} 包含对应于 correspondingEntryInA(i) 的列。

关于matlab - 我想对矩阵 A 的列进行分组,这些列在 Matlab 中的第三行具有相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8693135/

10-11 16:07