5

scipy.random.rand() および同じパッケージ内の他の関数はすべて、出力として float64 の配列を生成します (少なくとも Mac OS 上の python 2.7.3 64 ビット、scipy バージョン 0.12.0 の場合)。

私が欲しいのは、かなり大きな (N ギガバイト) ランダムに初期化された float32 の行列です。float64 にダブルスペースを割り当ててから 32 ビットに変換するのではなく、直接生成する簡単な方法はありますか?

4

1 に答える 1

4

float64Warren Weckesser がコメントで推奨しているように、配列を事前に割り当ててから、ランダムな s のバッチでコピーします。

ハックが必要な場合は、一様乱数ビットを使用して生成された 10 の浮動小数点数を次に示します。

>>> bytes_per_float = np.float32(0).nbytes  # ugly, I know
>>> np.frombuffer(random.bytes(10 * bytes_per_float), dtype=np.float32)
array([ -3.42894422e-23,  -3.33389699e-01,  -7.63695071e-26,
         7.02152836e-10,   3.45816648e-18,   2.80226597e-09,
        -9.34621269e-10,  -9.75820352e+08,   2.95705402e+20,
         2.57654391e+25], dtype=float32)

もちろん、これらは適切な分布に従っているわけではなく、配列に NaN または Inf が含まれている可能性があり、アラインメントの問題により、一部の非 x86 マシンでコードが実際にクラッシュする可能性があります。

于 2013-10-22T16:31:02.983 に答える