kay*_*kay 0 matlab loops vectorization
我有一个fun返回double 的函数.我想调用函数n次数并将结果存储在数组中:
results = zeros(1, n);
for i = 1:n
results(i) = fun;
end
Run Code Online (Sandbox Code Playgroud)
没有循环,我可以实现这一目标吗?
n在高达10,000,000的范围内,运行时间fun几乎可以忽略不计.
我试过了arrayfun,但它实际上要慢很多(大约慢了87倍):
results = arrayfun(@(~) fun, 1:n);
Run Code Online (Sandbox Code Playgroud)
可能循环已经是最快的解决方案吗?如果可以用一个衬垫完成,我仍然会感兴趣.
首先,要知道ARRAYFUN基本上有一个隐藏的for循环,所以我不确定你会获得速度.加上好的旧for循环有时可以从Just-in-Time编译器优化中受益,所以坚持循环:)
如果你真的想优化你的代码,编写Java功能马上回家n个元素的数组,而不是从MATLAB n次,每次返回一个值(瓶颈是这里的调用的开销)打来的.