没有for循环的n个函数结果的数组

时间:2012-06-29 16:57:39

标签: matlab loops vectorization

我有一个返回double的函数fun。我想调用函数n次并将结果存储在数组中:

results = zeros(1, n);
for i = 1:n 
    results(i) = fun;
end

我可以在没有循环的情况下实现这一目标吗?

n的范围高达10,000,000,fun的运行时间几乎可以忽略不计。


我尝试了arrayfun,但实际上速度慢了很多(大约慢了87倍):

results = arrayfun(@(~) fun, 1:n);

可能循环已经是最快的解决方案吗?如果可以用一个衬垫完成,我仍然会感兴趣。

2 个答案:

答案 0 :(得分:5)

首先,要知道ARRAYFUN内部基本上有一个隐藏的for循环,所以我不确定你会获得速度。加上好的旧for循环有时可以从Just-in-Time编译器优化中受益,所以坚持使用循环:)

如果你真的想要优化你的代码,那么编写你的Java函数来一次返回n个元素的数组,而不是每次返回一个值时从MATLAB调用n次(瓶颈是这里的调用开销)。

答案 1 :(得分:1)

如果我正确理解你的问题,fun每次都会返回一个随机/或不同的双重,那么循环是可行的方法。