4

多数の乱数を生成したい (間隔 [0,1] で一様に分布)。現在、これらの乱数の生成により、プログラムの実行が非常に遅くなっていますが、プログラムは小数点以下 5 桁まで計算するだけで済みます。

MATLAB が乱数を生成する方法については完全にはわかりませんが、乱数を小数点以下 5 桁まで計算する方法があれば、プログラムが (うまくいけば大幅に) 高速化されます。

そのようなことをする方法はありますか?

どうもありがとう。

4

3 に答える 3

2

あなたの質問に答えるために、はい、次のように単精度乱数を生成できます。

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');
于 2013-01-07T00:47:23.060 に答える
2

既に述べたように、RAND数値を単精度で直接生成するように指示できます。適切なサイズのチャンクで数値を生成するのが間違いなく最善です。さらにパフォーマンスが必要で、Parallel Computing Toolbox とサポートされている NVIDIA GPU がgpuArray.randあれば、特に次のように philox ジェネレーターを選択すると、関数はさらに高速になります。

parallel.gpu.RandStream('Philox4x32-10')
于 2013-01-07T08:36:45.987 に答える
0

配列内に多数の数値を生成する適切なコード レイアウトが実際にあると仮定すると、これは低精度の解決策になる可能性があります。私はテストしていませんが、高速であると述べられていることに注意してください。

R = randi([0 100000],500,300)/100000

これにより、0 から 1 の間の 150000 個の低精度乱数が生成されます。

于 2013-01-07T09:03:48.273 に答える