2015-01-26 50 views
0

我是matlab新手。我寫了下面的代碼。問題是循環沒有終止。請幫助我找出問題當我嘗試運行下面的代碼時,我無法返回到matlab中的命令提示符

actualvalue = randn(2000,10); 
reward = zeros(2000,10,1000); 
for i=1:2000 
    for j=1:10 
     for k=1:1000 
      mean = actualvalue(i,j); 
      reward(i,j,k) = normrnd(mean,1); 
     end; 
    end; 
end; 
+0

您正在運行'normrnd'很多次。如果您將最內部循環的索引減少到10,它會在幾秒鐘內返回。 – 2015-01-26 23:34:00

回答

2

可以毫不循環來完成,這是通常更快:

reward = bsxfun(@plus, actualvalue, randn(2000,10,1000)); 

要看到這是如何工作的,請注意,以平均mu和標準偏差1一個正常的隨機變量僅僅是一個標準化的( 0-均值,1-標準偏差)正態隨機v易於添加到哪個mu。這種添加可以通過bsxfun高效完成。使用randn而不是normrnd也可以節省一些時間,因爲normrnd只是調用randn帶來一些開銷。

0

另一種解決方案,而不用於循環:

reward=normrnd(repmat(actualvalue,1,1,1000),1); 

repmat(actualvalue,1,1,1000)增加了第三個層面,所以現在我們有一個三維矩陣,這只是1000矩陣actualvalue的副本,我們可以給這個作爲輸入normrnd,並且它將直接生成與「擴展的」均值和單位差異相同大小的矩陣。

相關問題