标题可能略有混淆,但我想做的是以下内容:
我有函数输入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%的速度。
谢谢,
答案 0 :(得分:1)
如果使用带有两个输出参数的histc
,则第二个输出将为每个数据条目提供bin编号。您可以使用bin编号来汇总属于每个bin的条目,例如,使用bsxfun
或accumarray
。
[val, id] = histc(x, xr);
v = accumarray(id(:), y(:));