For循环比向量快?

1次查看(过去30天)
杰罗姆
杰罗姆 2021年9月17日
评论道: 图像分析 2021年9月18日
我在想 循环运算通常比向量或矩阵运算慢,但一个简单的例子却恰恰相反。
下面是一个计数器的不同实现的比较。下面五次运行的结果如下:
0.0730 0.0608 0.0691
0.0705 0.0543 0.0669
0.0745 0.0546 0.0709
0.0756 0.0571 0.0798
0.0755 0.0573 0.0729
我很惊讶地看到这个函数 equation1 (向量乘以标量)比 计数器 (循环)。
我也很惊讶地看到这个函数 equation1 是低于 equation2 ,因为向量存储在变量中。
有人能解释一下吗?
N = 10 ^ 7;
一步= 0.123456789;
f1 = @()方程1(step, N);
时间t1 = (f1);
f2 = @()方程2(step, N);
t2时间= (f2);
f3 = @()计数器(步骤,N);
t3时间= (f3);
disp ((t1 t2 t3))
测试中%函数
函数out = equation1(step, N)
n = 1: n;
Out = n * step;
结束
函数out = equation2(step, N)
out = (1:N) * step;
结束
函数out = counter(step, N)
= 0 (1, N);
(1) =一步;
n = 2: n
(n) = Out (n-1) + step;
结束
结束
1评论
杰罗姆
杰罗姆 2021年9月17日
我只是注意到,当使用Run an Time时,结果是非常不同的。使用下面的代码,结果是:
  • 测试>计数器:1.055秒
  • 测试> equation1: 0.097 s
  • 测试> equation2: 0.077 s
我想在这种情况下,tic toc和timeit是比分析器更精确的测量。
N = 10 ^ 7;
一步= 0.123456789;
out1 =方程1(step, N);
out2 = equation2(step, N);
out3 = counter(step, N);
测试中%函数
相同就像最初的帖子一样

登录评论。

接受的答案

图像分析
图像分析 2021年9月17日
我不惊讶。请看我的附件演示:
Vectorized 1000次兑换403次= 40.3%。
For loop在1000次中获胜597次= 59.70%。
矢量化方法的平均时间= 7.3006e-06。
for循环方法的平均时间= 1.40819e-05。
这通常取决于矢量化是如何完成的以及有多少元素。对于少数元素可能是一种方法,但对于数千万元素却是相反的。
2的评论
图像分析
图像分析 2021年9月18日
@Jerome 是的,这是一个永恒的神话。也就是说,通常或通常向量化会更快,并使代码更小、更干净 总是 ,更直观,更容易阅读和理解。

登录评论。

更多的答案(0)

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区可以如何帮助你!

开始狩猎!

翻译的