2012-05-04 95 views
0

好吧,這就像第5次,我不得不問這個問題,仍然沒有人能夠給我一個答案或解決方案。但在這裏,我們又來了......爲什麼不會隨機化(MATLAB)?

我想運行一個非常簡單的小MATLAB程序。它所做的只是隨機顯示目錄中的圖像。這裏是我的代碼:

files = dir(fullfile(matlabroot,'toolbox','semjudge',bpic,'*.png')); 
nFiles = numel(files); 
combos = nchoosek(1:nFiles, 2); 
index = combos(randperm(size(combos, 1)), :); 
picture1 = files(index(nRep,1)).name; 
picture2 = files(index(nRep,2)).name; 
image1 = fullfile(matlabroot,'toolbox','semjudge',bpic,picture1); 
image2 = fullfile(matlabroot,'toolbox','semjudge',bpic,picture2); 
subplot(1,2,1); imshow(image1); 
subplot(1,2,2); imshow(image2); 

我已經嘗試了幾次不同的迭代,包括用「randsample」替換「nchoosek」。

但它不工作!每次運行程序時,腳本都會以相同的順序運行相同的圖像文件。它爲什麼這樣做?這就像是隨機的圖像文件,我第一次運行它,但現在它只能運行在它們的順序,而不是每次腳本運行時隨機他們。

有人可以幫我這個嗎?

+0

看看這裏:http://www.mathworks.co.uk/support/solutions/en/data/1-18WH6/index.html?product=CO&solution=1-18WH6 – BeRecursive

+4

我不能相信你之前已經問過這個問題5次了,沒有人告訴你這個簡單的事實:matlab每次啓動時都使用相同的默認隨機種子。所以我回顧了過去的問題,而且你沒有多次問過這個問題。 – 2012-05-04 13:54:34

+0

@woodchips:我問這個問題多次,沒有人告訴我。謝謝。 ypnos:我週末不在這個城市,沒有電腦來檢查這個。 –

回答

6

的僞隨機數發生器從特定種子開始關閉。提供的「隨機」數字是確定性的。您需要更改種子以更改這些數字。

這樣做的好處是,即使您在算法中使用僞隨機性,您也可以通過再次使用相同的種子重播一次運行。

參考:http://www.mathworks.de/help/techdoc/ref/rng.html

5

正如@ ypnos的答案的闡述,你可能要添加一行:

rng('shuffle'); 

你的代碼的開始。這將爲隨機數生成器生成一個基於時間的值,然後您應該得到一個不同的隨機數序列。

相關問題