多数の乱数を生成したい (間隔 [0,1] で一様に分布)。現在、これらの乱数の生成により、プログラムの実行が非常に遅くなっていますが、プログラムは小数点以下 5 桁まで計算するだけで済みます。
MATLAB が乱数を生成する方法については完全にはわかりませんが、乱数を小数点以下 5 桁まで計算する方法があれば、プログラムが (うまくいけば大幅に) 高速化されます。
そのようなことをする方法はありますか?
どうもありがとう。
あなたの質問に答えるために、はい、次のように単精度乱数を生成できます。
r = rand(..., 'single'); %Reference: http://www.mathworks.com/help/matlab/ref/rand.html
単精度の数値は、10 進数として印刷すると有効数字が 7 桁になります。
上記のコメントと同じように、これで多くのパフォーマンスが得られるとは思いません。rand
操作が本当に遅い場合に最初に行うことは、呼び出しをバッチ処理することです。つまり、次の代わりに:
for ix 1:1000
y = rand(1,1,'single);
end
使用する:
yVector = rand(1000,1,'single');
既に述べたように、RAND
数値を単精度で直接生成するように指示できます。適切なサイズのチャンクで数値を生成するのが間違いなく最善です。さらにパフォーマンスが必要で、Parallel Computing Toolbox とサポートされている NVIDIA GPU がgpuArray.rand
あれば、特に次のように philox ジェネレーターを選択すると、関数はさらに高速になります。
parallel.gpu.RandStream('Philox4x32-10')
配列内に多数の数値を生成する適切なコード レイアウトが実際にあると仮定すると、これは低精度の解決策になる可能性があります。私はテストしていませんが、高速であると述べられていることに注意してください。
R = randi([0 100000],500,300)/100000
これにより、0 から 1 の間の 150000 個の低精度乱数が生成されます。