0

标题可能有点混乱,但我想做的是以下内容:

我有函数输入 x,t、输出 y(即 y = f(x,t))和一组范围 xr、tr 和我想做的

v = zeros(1,length(xr)-1)
for kk=1:(length(xr)-1)
   ix = x >= xr(kk) & x < xr(kk+1) & t >= tr(kk) & t < tr(kk+1)
   v(kk) = sum(y(ix));
end

这非常慢,而几乎相同的 histc(除了它对区间中的条目数求和而不是函数输出)非常快。如何更快地实施?我尝试使用 arrayfun,但这只会提高 25% 的速度。

谢谢,

4

1 回答 1

1

如果您使用histc两个输出参数,则第二个输出将为您提供每个数据条目的 bin 编号。您可以使用 bin 编号来总结属于每个 bin 的条目,例如,使用bsxfunaccumarray

[val, id] = histc(x, xr); 

v = accumarray(id(:), y(:));
于 2013-05-13T12:24:03.557 回答