Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 不带for循环的n个函数结果的数组_Matlab_Loops_Vectorization - Fatal编程技术网

Matlab 不带for循环的n个函数结果的数组

Matlab 不带for循环的n个函数结果的数组,matlab,loops,vectorization,Matlab,Loops,Vectorization,我有一个函数fun,它返回一个double。我想调用函数n次,并将结果存储在数组中: results = zeros(1, n); for i = 1:n results(i) = fun; end 我能在没有循环的情况下实现这一点吗 n的范围高达10000000,几乎可以忽略fun的运行时间 我尝试了arrayfun,但实际上要慢很多(大约慢87倍): 循环可能已经是最快的解决方案了吗?如果这可以用一行程序来完成,我仍然很感兴趣。如果我正确理解你的问题,并且fun每次都返回一个随

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

results = zeros(1, n);
for i = 1:n 
    results(i) = fun;
end
我能在没有循环的情况下实现这一点吗

n
的范围高达10000000,几乎可以忽略
fun
的运行时间


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


循环可能已经是最快的解决方案了吗?如果这可以用一行程序来完成,我仍然很感兴趣。

如果我正确理解你的问题,并且
fun
每次都返回一个随机/或不同的双精度,那么循环就是最好的选择。

如果我正确理解你的问题,并且
fun
每次都返回一个随机/或不同的双精度,首先,要知道ARRAYFUN中基本上有一个隐藏的for循环,所以我不确定你是否能提高速度。另外,好的旧for循环有时可以从即时编译器优化中获益,所以请坚持使用循环:)


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

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


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

它是否总是返回相同的值?“乐趣”取决于什么?@S.P不,它不会总是返回相同的结果
fun
是一种外部Java方法。据我所知,没有其他选择。你需要在它上面循环。它总是返回相同的值吗?“乐趣”取决于什么?@S.P不,它不会总是返回相同的结果
fun
是一种外部Java方法。据我所知,没有其他选择。您需要对其进行循环。请注意,在将来的版本中,
arrayfun
可能会变成多线程。@Amro,我想更改Java函数是最好(最快)的解决方案。我没有想过。谢谢@乔纳斯:没错,我认为它已经在GPUNote上运行了,在未来的版本中,
arrayfun
很可能会变成多线程的。@Amro,我想更改Java函数是最好(最快)的解决方案。我没有想过。谢谢@乔纳斯:是的,我想它已经在GPU上运行了
results = arrayfun(@(~) fun, 1:n);