【发布时间】:2017-08-11 15:50:33
【问题描述】:
最简单的描述方式是通过示例:
data = [1, 5, 3, 6, 10];
indices = [1, 2, 2, 2, 4];
result = zeroes(1, 5);
我希望result(1) 是data 中所有元素的总和,其索引为1,result(2) 是data 中所有元素的总和,其索引为2 等.
这可行,但在应用(将 5 更改为 65535)到 64K 元素向量时非常慢:
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
但这是一种非常非八度音阶的方式。
【问题讨论】:
标签: indexing sum octave vectorization binning