如何在 MATLAB 中基于索引向量添加矩阵的行?

问题描述 投票:0回答:1

如果我们有两个列向量索引和值,我们可以使用

accumarray(indices, values)
对重复值(即具有匹配索引的向量值的条目)求和。

当向量值变成矩阵时,是否有一种类似的方法可以工作,这样我们现在可以对整行而不是标量求和?

当然,一种方法是使用 arrayfun 并将 AccumArray 分别应用于当前矩阵值的每一列,其形式为

cell2mat(arrayfun(@(x) accumarray(indices, values(:, x)), 1:size(values, 2), 'UniformOutput', false));
matlab vectorization
1个回答
0
投票

是的,有,使用

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
© www.soinside.com 2019 - 2024. All rights reserved.