accumarray 関数を使用して、ベクトル「id」で定義されたカテゴリ内のベクトル「データ」の値を合計しています。ベクター ID が必ずしもソートされているわけではなく、連続していない番号が含まれている可能性もあります。また、(unique(id) と同じサイズではなく) 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;