3

首先,我真的很难把这个问题描述得很好,但我会尝试的。

假设我们有矩阵 A

A = [23 1;
     45 1
     78 1
     86 1
     98 2
     1  2
     23 2
     14 3
     15 4
     85 4]

我想要的输出是

    B{1} = [23,45,78,86]
    B{2} = [98,1,23]
    B{3} = [14]
    B{4} = [15,85]

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

4

2 回答 2

6

你可以accumarray在这里使用:

B = accumarray(A(:,2),A(:,1),[],@(x){x},{});

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

counts = histc(A(:,2),unique(A(:,2)));
B = mat2cell(A(:,1),counts);
于 2013-03-01T14:15:37.893 回答
1

这是一个简单的方法。它使用循环,但应该很快,因为单元数组B是使用反向索引技巧预先分配的。

for key = fliplr(unique(A(:,2)'))
    ndx = A(:,2) == key;
    B{key} = A(ndx,1)';
end
于 2013-03-01T13:48:54.100 回答