首先,我很难将问题描述得非常好,但我会尝试。
假设我们有矩阵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循环来做这个。我想使用使用并行处理的函数。
答案 0 :(得分:6)
您可以在此处使用accumarray
:
B = accumarray(A(:,2),A(:,1),[],@(x){x},{});
如果您知道A
已排序,并且第二列中没有丢失的条目,您还可以使用mat2cell
:
counts = histc(A(:,2),unique(A(:,2)));
B = mat2cell(A(:,1),counts);
答案 1 :(得分:1)
这是一种简单的方法。它使用循环,但应该非常快,因为使用反向索引技巧预先分配了单元数组B
。
for key = fliplr(unique(A(:,2)'))
ndx = A(:,2) == key;
B{key} = A(ndx,1)';
end