0

この質問をするのは 5 回目ですが、まだ誰も答えや解決策を教えてくれません。しかし、ここでまた行きます...

非常に単純で小さな 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」に置き換えるなど、これを何度か繰り返してみました。

しかし、うまくいきません!プログラムを実行するたびに、スクリプトは同じ画像ファイルを同じ順序で実行します。なぜこれを行うのですか?最初に実行したときに画像ファイルをランダム化したようですが、スクリプトを実行するたびにランダム化するのではなく、その順序でのみ実行します。

誰かがこれで私を助けてくれますか?

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 に答える