我有一个返回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);
可能循环已经是最快的解决方案吗?如果可以用一个衬垫完成,我仍然会感兴趣。
答案 0 :(得分:5)
首先,要知道ARRAYFUN内部基本上有一个隐藏的for循环,所以我不确定你会获得速度。加上好的旧for循环有时可以从Just-in-Time编译器优化中受益,所以坚持使用循环:)
如果你真的想要优化你的代码,那么编写你的Java函数来一次返回n个元素的数组,而不是每次返回一个值时从MATLAB调用n次(瓶颈是这里的调用开销)。
答案 1 :(得分:1)
如果我正确理解你的问题,fun
每次都会返回一个随机/或不同的双重,那么循环是可行的方法。