我想对矩阵A的列进行分组,这些列对于Matlab中的第三行具有相同的值

对于矩阵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(如果没有有效列,则为空).

如果您希望{i}包含与A的第三行中第i个最小唯一值对应的列,则可以先使用统计工具箱中的GRP2IDX

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

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

转载注明原文:我想对矩阵A的列进行分组,这些列对于Matlab中的第三行具有相同的值 - 代码日志