【问题标题】:arrayfun to bsxfun possiblearrayfun 到 bsxfun 可能
【发布时间】:2017-10-29 11:54:24
【问题描述】:

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

说了这么多,我在努力

  1. 对给定数组中的所有数字求和,比如 y,在某个索引之前
  2. 将特定位置的数字(即上述索引位置的数字)添加到上述总和中。

我可以使用下面的示例代码轻松地执行此操作:

% 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 一起使用的版本的好方法是什么。

附: y中的数字不重复上面给出的,这只是一个例子,也可以是[3 4 3 1 4 ...]

【问题讨论】:

标签: arrays matlab bsxfun


【解决方案1】:

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

o2 = cumsum(y);

旁注:x 的定义中不需要括号。

【讨论】:

  • 确实,我通过更多调查也得到了同样的结果 ;-) +1
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多