为什么随机化不起作用(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);

我已经尝试了几种不同的迭代,包括将"nchoosek"替换为"randsample"。

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

有人可以帮我解决这个问题吗?

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

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

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

作为@ypnos答案的详细说明,您可能希望添加如下行:

rng('shuffle');

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

最新更新