arrayfun到bsxfun可能

时间:2017-10-29 11:54:25

标签: arrays matlab bsxfun

我知道bsxfun(运行速度很快!)和arrayfun(据我所知,在内部使用预期会很慢的循环)用于不同用途,至少在最基本的级别。

说完这个,我正在尝试

  1. 总结给定数组中的所有数字,比如y,在某个索引之前
  2. 将特定位置的数字(上述索引位置的数字)添加到上述总和中。
  3. 我可以轻松地使用下面的示例代码执行此操作:

    % 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 ...]

2 个答案:

答案 0 :(得分:1)

x总是形式为1:n?假设答案是肯定的,那么你可以用更快的代码获得相同的结果:

o2 = cumsum(y);

旁注:您不需要x。

定义中的括号

答案 1 :(得分:0)

如果您拥有受支持的GPU设备,则可以将变量定义为gpuArray类型,因为arrayfun,bsxfun和pagefun与GPU兼容。 对于大数据,GPU计算应该更快。