按一列对矩阵行进行分组

bop*_*bop 3 parallel-processing matlab grouping matrix cell

首先,我很难描述问题真的很好,但我会尝试.

假设我们有矩阵A.

A = [23 1;
     45 1
     78 1
     86 1
     98 2
     1  2
     23 2
     14 3
     15 4
     85 4]
Run Code Online (Sandbox Code Playgroud)

我想要的是输出

    B{1} = [23,45,78,86]
    B{2} = [98,1,23]
    B{3} = [14]
    B{4} = [15,85]
Run Code Online (Sandbox Code Playgroud)

请记住,原始A是一个巨大的矩阵,我不想用for循环做这个.我想使用使用并行处理的函数.

Jon*_*nas 6

你可以accumarray在这里使用:

B = accumarray(A(:,2),A(:,1),[],@(x){x},{});
Run Code Online (Sandbox Code Playgroud)

如果您知道A已排序,并且第二列中没有丢失的条目,您还可以使用mat2cell:

counts = histc(A(:,2),unique(A(:,2)));
B = mat2cell(A(:,1),counts);
Run Code Online (Sandbox Code Playgroud)