randn
擬似乱数ジェネレータを使用するテストをほとんど実行する必要はありません。どのように私は自分自身で種を設定できますか?このテストを実行するたびに同じ結果が得られますか? (ええ、私はそれが少し変だと思いますが、それが問題です)。擬似乱数ジェネレータのカスタムシードを設定する方法
seed
プロパティを持つRANDSTREAM
オブジェクトが見つかりましたが、読み取り専用です。発電機を播種するためにそれを使用する方法はありますか?
randn
擬似乱数ジェネレータを使用するテストをほとんど実行する必要はありません。どのように私は自分自身で種を設定できますか?このテストを実行するたびに同じ結果が得られますか? (ええ、私はそれが少し変だと思いますが、それが問題です)。擬似乱数ジェネレータのカスタムシードを設定する方法
seed
プロパティを持つRANDSTREAM
オブジェクトが見つかりましたが、読み取り専用です。発電機を播種するためにそれを使用する方法はありますか?
それを行うための古い方法:
randn('seed',0)
新しい方法:あなたは、rand
とrandn
共有し、同じストリームの新しい方法を使用する場合
s = RandStream('mcg16807','Seed',0)
RandStream.setDefaultStream(s)
注呼び出しているので、もしこと両方とも、古いメソッド(別々のジェネレータを持つ)とは違った数の数字が生成されることがあります。古い方法は、この理由(およびレガシーコード)でも引き続きサポートされています。
詳細はhttp://www.mathworks.com/help/techdoc/math/bsn94u0-1.htmlを参照してください。
rng(mySeed)
を呼び出して、グローバルストリーム(Matlab R2011bでテスト済み)のシードを設定できます。これは、rand
,randn
、およびrandi
の機能に影響します。
same page that James linked toは、これをさまざまな古い方法の推奨代替品としてリストしています(表の右欄の中央のセルを参照)。
ここではいくつかのサンプルコードです:
format long; % Display numbers with full precision format compact; % Get rid of blank lines between output mySeed = 10; rng(mySeed); % Set the seed disp(rand([1,3])); disp(randi(10,[1,10])); disp(randn([1,3])); disp(' '); rng(mySeed); % Set the seed again to duplicate the results disp(rand([1,3])); disp(randi(10,[1,10])); disp(randn([1,3]));
その出力は次のようになります。
0.771320643266746 0.020751949359402 0.633648234926275 8 5 3 2 8 2 1 7 10 1 0.060379730526407 0.622213879877005 0.109700311365407 0.771320643266746 0.020751949359402 0.633648234926275 8 5 3 2 8 2 1 7 10 1 0.060379730526407 0.622213879877005 0.109700311365407
mySeed=57; % an integer number
rng(mySeed,'twister') %You can replace 'twister' with other generators
Thx。これに投票してください! –
あなただけだけ使用し、いくつかの既知の状態にRNGをリセットしたいときは:
seed = 0;
randn('state', seed);
rand ('state', seed);
A = round(10*(rand(1,5))); // always will be [10 2 6 5 9]
は、
いいえ、それは変わっていません。実際には、テストとデバッグにとってはかなり重要です。 – Jonas
@Jonas、yup、とりわけ結果の再現性に関して... – Gacek
逆のこと、すなわちMatlabを再起動するたびに再現性を避けるために、コマンドは['rng( 'shuffle')']( http://mathworks.com/help/matlab/ref/rng.html)、現在の時刻に基づいてシードを設定します。 –