小编Aur*_*dal的帖子

使用在每次迭代中递增的变量向量化 foror 循环

我试图通过摆脱一些 for 循环来优化我的代码的运行时间。但是,我有一个在每次迭代中递增的变量,其中有时会重复索引。我在这里提供一个最小的例子:

a = [1 4 2 2 1 3 4 2 3 1]
b = [0.5 0.2 0.3 0.4 0.1 0.05 0.7 0.3 0.55 0.8]
c = [3 5 7 9]

for i = 1:10
    c(a(i)) = c(a(i)) + b(i)
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想通过写作来计算它:

c(a) = c(a) + b 
Run Code Online (Sandbox Code Playgroud)

但显然它不会给我相同的结果,因为我必须多次重新计算相同索引的值,所以这种矢量化方式不起作用。另外,如果这很重要,我正在使用 Matlab 或 Octave。

非常感谢您的帮助,我不确定是否可以进行矢量化。


编辑:非常感谢您到目前为止的回答。我发现了 accumarray,我以前不知道它,并且也理解了为什么改变 Matlab 和 Octave 之间的 for 循环给了我如此不同的时间。我也更好地理解了我的问题。我举了一个太简单的例子,我认为我可以扩展它,但是,如果 b 是一个矩阵呢?

(让我们暂时忘记 c ):

a = [1 4 2 2 1 3 4 2 3 1] …
Run Code Online (Sandbox Code Playgroud)

optimization matlab loops for-loop octave

6
推荐指数
1
解决办法
110
查看次数

标签 统计

for-loop ×1

loops ×1

matlab ×1

octave ×1

optimization ×1