【发布时间】:2014-09-20 14:48:50
【问题描述】:
我有这个玩具例子:
l = [1, 2, 3, 4, 5];
a = zeros(3, 1);
for p = 1:3
a(p) = sum(l(p:p+2));
end;
这个例子计算'l'中每3个元素的和,它们彼此接近,并将其写入'a'。现在,是否可以使用向量化和矩阵运算重写相同的代码,而无需“for”循环?我尝试过类似的东西:
p = 1:3;
a(p) = sum(l(p:p+2));
结果是 [6, 6, 6],它计算了前三个元素的总和,并将其写在每个位置的 'a' 中。这只是一个玩具示例,但我需要在 20x20x20 立方体元素总和的 3d 256x256x128 数组上做类似的事情,在那里使用“for”循环非常慢。那么,有没有快速解决这个问题的方法呢?
编辑: Divakar 建议我在这里使用我的实际案例。好吧,这是其中最重要的部分,我正在尝试重写:
编辑2: 谢谢你的答案。明白了思路,把上面的代码去掉,现在重写。
【问题讨论】:
-
向量化的代码会随着多维数组的变化而变化很大,所以我建议你在这里使用你的实际情况。另外,使用预期的输出进行编辑,所以可以以一个小的 3D 数组为例。
标签: matlab loops vector vectorization