分组元素的单元格

时间:2015-06-08 18:15:07

标签: matlab cell grouping

我有一个链表S,S(i)= s_i,S(i)是一个非负整数。 我想要一个单元格C = C {0 + 1},... C {max(S)+1},使得C {i + 1} = {i_1,...,i_k},S(i_1)=。 .. = S(i_k)= i且k是最大值。 例如:

S(1)=0,S(2)=0,S(3)=1,S(4)=2,S(5)=1,S(6)=2,S(7)=6,

然后我应该

 C{0+1}={1,2}, C{1+1}={3,5}, C{2+1}={4,6}, C{3+1}={},...C{6+1}={7}, C{7+1}={}

如何在matlab中尽快完成?

我已经找到了

Place equal elements in cell array

但是,我也需要C {3 + 1}中的空集。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

使用accumarray

可以轻松完成
C = accumarray(S(:)+1, 1:numel(S), [], @(x) {sort(x.')});

以下是bsxfunmat2cell的替代方案:

t = bsxfun(@eq, S(:), 0:max(S));
s = sum(t, 1);
t = bsxfun(@times, t, (1:numel(S)).');
C = mat2cell(nonzeros(t).', 1, s);