2017-06-04 124 views
0

我有两个1×10^3矩阵,它的元素在模拟循环的每个步骤中都会改变。要在每个循环步骤中找到一个新元素,我需要2 * 1000个高斯随机数。循环步数等于10^5。在这种情况下哪种方法更省时间?在Matlab中优化生成随机数

  1. 在for循环之前创建两个10^5乘1000的随机矩阵并在循环内调用它们。

  2. 在循环的每一步创建两个1×10^3随机矩阵?

+0

相关:https://stackoverflow.com/q/39251206/3372061 –

+0

因为for循环中有很多东西,如果我运行代码,需要数小时才能给出输出@ EBH –

回答

0

下面是一些代码来回答你的问题:

function rnd_time_test 
rnd_test = @(n) randn(2,n,1000); 
N = 1e5; 
one_time = timeit(@() rnd_test(N)) 
loop_time = timeit(@() rnd_test_loop(N)) 

    function R = rnd_test_loop(n) 
     for k = 1:n 
      R = randn(2,1000); 
     end 
    end 
end 

和结果:

one_time = 
     2.245 
loop_time = 
     1.6311 

所以,我的机器上,使用循环更快。