用numpy / scipy中的随机数初始化float32矩阵

时间:2013-10-22 16:17:05

标签: python random numpy scipy

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

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

1 个答案:

答案 0 :(得分:4)

我会预先分配数组,然后按照Warren Weckesser在评论中推荐的随机float64批量复制。

如果您正在进行黑客攻击,那么使用统一随机位生成十个浮点数:

>>> 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机器上崩溃。