对于矩阵 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/