0

好的,这就像我第五次不得不问这个问题,但仍然没有人能够给我答案或解决方案。但我们又来了……

我想运行一个非常简单的 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”。

但它不起作用!每次我运行程序时,脚本都会以相同的顺序运行相同的图像文件。为什么要这样做?就像我第一次运行它时它随机化了图像文件,但现在它只按该顺序运行它们,而不是每次运行脚本时都随机化它们。

有人可以帮我吗?

4

2 回答 2

6

伪随机数生成器从特定的种子开始。提供的“随机”数字是确定性的。您需要更改种子才能更改这些数字。

这样做的好处是,即使您在算法中使用伪随机性,您也始终可以通过再次使用相同的种子来重播一次运行。

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

于 2012-05-04T13:46:04.537 回答
5

作为@ypnos 答案的详细说明,您可能想要添加这样的一行:

rng('shuffle');

到代码的开头。这将为随机数生成器提供一个基于时间的值,然后你应该得到一个不同的随机数序列。

于 2012-05-04T14:03:21.047 回答