5

scipy.random.rand() 和同一个包中的其他函数都产生 float64 数组作为输出(至少对于 Mac OS 上的 python 2.7.3 64 位,scipy 版本 0.12.0)。

我想要的是一个相当大的(N 千兆字节)随机初始化的 float32 矩阵。有没有一种简单的方法可以直接生成一个,而不是为 float64 分配双倍空间然后转换为 32 位?

4

1 回答 1

4

我会预先分配数组,然后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 机器上崩溃。

于 2013-10-22T16:31:02.983 回答