我正在使用 accumarray 函数对向量“id”定义的类别中的向量“数据”中的值求和。我希望我的向量 id 不一定要排序,也可能包含不连续的数字。我还想得到一个与 id 大小相同(而不是 unique(id) 大小)的和 Sij 向量。
例如
id = [3 2 4 3 2 3]';
data = [6 43 3 4 2 5]';
作为我想要的输出
Sij = [15 45 3 15 45 15]';
我设法通过创建数据集并使用连接函数(使用以下代码)来做到这一点,但我想知道是否有更有效的方法(这是我正在最大化的似然函数的一部分,我想加快速度)。谢谢!
clear;
id = [3 2 4 3 2 3]';
data = [6 43 3 4 2 5]';
indices = [id ones(size(id))];
S = accumarray(indices, data);
DS = dataset((1:size(S))',S);
DS = DS(DS.S~=0,:);
DS.Properties.VarNames={'id','S'};
C =join(dataset(id),DS);
Sij = C.S;