0

我有一个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);

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

4

2 回答 2

5

首先,要知道 ARRAYFUN 里面基本上有一个隐藏的 for 循环,所以我不确定你是否会加快速度。另外,好的旧 for 循环有时可以从即时编译器优化中受益,所以坚持使用循环 :)

如果您真的想优化您的代码,请编写您的 Java 函数以一次返回一个包含 n 个元素的数组,而不是每次从 MATLAB 调用 n 次返回一个值(瓶颈是这里的调用开销)。

于 2012-06-29T17:19:30.710 回答
1

如果我正确理解了您的问题,并且fun每次都返回随机/或不同的双精度,那么循环就是要走的路。

于 2012-06-29T17:05:38.187 回答