最简单的方式是通过示例来描述这个问题:
我希望
但这样做并不太符合Octave的风格。
data = [1, 5, 3, 6, 10];
indices = [1, 2, 2, 2, 4];
result = zeroes(1, 5);
我希望
result(1)
是data
中索引为1
的所有元素之和,result(2)
是data
中索引为2
的所有元素之和,以此类推。
当应用于具有64K个元素的向量时(将5
更改为65535
),此方法可行但速度非常慢:
result = result + arrayfun(@(x) sum(data(index==x)), 1:5);
我认为创建64K个具有64K元素的向量是导致时间消耗的原因。是否有更快的方法来完成这个任务?或者我需要想出一个完全不同的方法吗?
for i = [1:5]
idx = indices(i);
result(idx) = result(idx) + data(i);
endfor
但这样做并不太符合Octave的风格。