如果我们有两个列向量索引和值,我们可以使用
accumarray(indices, values)
对重复值(即具有匹配索引的向量值的条目)求和。
当向量值变成矩阵时,是否有一种类似的方法可以工作,这样我们现在可以对整行而不是标量求和?
当然,一种方法是使用 arrayfun 并将 AccumArray 分别应用于当前矩阵值的每一列,其形式为
cell2mat(arrayfun(@(x) accumarray(indices, values(:, x)), 1:size(values, 2), 'UniformOutput', false));
splitapply
代替 accumarray
:
values = [10 20 30; 40 50 60; 70 80 90; 100 110 120; 130 140 150];
indices = [2; 1; 2; 3; 1];
result = splitapply(@(x) sum(x,1), values, indices);
给予
values =
10 20 30
40 50 60
70 80 90
100 110 120
130 140 150
result =
170 190 210
80 100 120
100 110 120