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

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)

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

Amr*_*mro 5

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

如果你真的想优化你的代码,编写Java功能马上回家n个元素的数组,而不是从MATLAB n次,每次返回一个值(瓶颈是这里的调用的开销)打来的.