为什么随机化不起作用(MATLAB)?

Rya*_*ons 0 random matlab image

好吧,这就像第五次我不得不提出这个问题,但仍然没有人能够给我一个答案或解决方案.但是我们又来了......

我想运行一个非常简单的小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);
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的迭代,包括用"randsample"替换"nchoosek".

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

有人可以帮我这个吗?

ypn*_*nos 6

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

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

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


aar*_*rkk 5

作为@ ypnos答案的详细说明,您可能想要添加如下所示的行:

rng('shuffle');
Run Code Online (Sandbox Code Playgroud)

到代码的开头.这将使随机数生成器具有基于时间的值,然后您应该获得不同的随机数序列.