我知道bsxfun(运行速度很快!)和arrayfun(据我所知,在内部使用预期会很慢的循环)用于不同用途,至少在最基本的级别。
说完这个,我正在尝试
我可以轻松地使用下面的示例代码执行此操作:
% index array
x = [ 1:6 ]; % value array
y = [ 3 3 4 4 1 1 ];
% arrayfun version
o2 = arrayfun(@(a) ...
sum(y(1:(a-1)))+...
y(a), ...
x)
但是大型投入似乎很慢。
我想知道如果可能的话,将此转换为适用于bsxfun的版本的好方法。
P.S。 y中的数字不再重复,如上所述,这只是一个例子,它也可能是[3 4 3 1 4 ...]
答案 0 :(得分:1)
x总是形式为1:n?假设答案是肯定的,那么你可以用更快的代码获得相同的结果:
o2 = cumsum(y);
旁注:您不需要x。
定义中的括号答案 1 :(得分:0)
如果您拥有受支持的GPU设备,则可以将变量定义为gpuArray类型,因为arrayfun,bsxfun和pagefun与GPU兼容。 对于大数据,GPU计算应该更快。