好吧,这就像我第五次问这个问题,仍然没有人能够给我答案或解决方案。但是我们又来了...
我想运行一个非常简单的 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');
到代码的开头。这将用基于时间的值为随机数生成器播种,然后你应该得到一个不同的随机数序列。