简单的问题我猜:我有2个向量,一个有1到10的索引号,另一个只有随机值。
id = [1 2 3 4 4 4 5 6 7 7];
val = [.8 .9 .12 .91 .63 .09 .28 .55 .96 .96 ]
我正在寻找的结果应该是:
new_id = [1 2 3 4 5 6 7];
val = [.8 .9 .12 1.63 .28 .55 1.92]
我该怎么做? 谢谢!
答案 0 :(得分:3)
使用unique
和accumarray
:
[new_id, ~, v] = unique(id(:));
val_summed = accumarray(v, val(:));
即使id
不一定是正整数,上述工作仍然有效。如果是,则替代方法是使用sparse
来执行总和,并使用find
来提取所需结果:
[new_id, ~, val_summed] = find(sparse(id, 1, val));
答案 1 :(得分:1)
您想要的功能称为 accumarray :
accumarray(id',val)
它根据id下标计算新元素。