scipy.random.rand() 和同一个包中的其他函数都产生 float64 数组作为输出(至少对于 Mac OS 上的 python 2.7.3 64 位,scipy 版本 0.12.0)。
我想要的是一个相当大的(N 千兆字节)随机初始化的 float32 矩阵。有没有一种简单的方法可以直接生成一个,而不是为 float64 分配双倍空间然后转换为 32 位?
我会预先分配数组,然后float64
按照 Warren Weckesser 在评论中的建议分批复制随机 s。
如果您想要破解,这里有十个使用统一随机位生成的浮点数:
>>> 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 机器上崩溃。