我有一个链表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}中的空集。
我该怎么做?
答案 0 :(得分:1)
使用accumarray
:
C = accumarray(S(:)+1, 1:numel(S), [], @(x) {sort(x.')});
t = bsxfun(@eq, S(:), 0:max(S));
s = sum(t, 1);
t = bsxfun(@times, t, (1:numel(S)).');
C = mat2cell(nonzeros(t).', 1, s);