scipy.random.rand() および同じパッケージ内の他の関数はすべて、出力として float64 の配列を生成します (少なくとも Mac OS 上の python 2.7.3 64 ビット、scipy バージョン 0.12.0 の場合)。
私が欲しいのは、かなり大きな (N ギガバイト) ランダムに初期化された float32 の行列です。float64 にダブルスペースを割り当ててから 32 ビットに変換するのではなく、直接生成する簡単な方法はありますか?
float64
Warren 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 マシンでコードが実際にクラッシュする可能性があります。