在float32 / 16中就地生成正常的随机数

时间:2014-02-24 21:58:41

标签: python random numpy scipy

在Numpy / Scipy中,如何使用指定的(float)dtype从正态分布生成随机数?就我而言,我需要float32float16

由于数组非常大,我不希望在采样后转换数组。

例如:

a = np.random.normal(1e7).astype('float16')

完成这项工作,但因为它需要一个临时的float64数组,所以它使用的RAM是直接float16采样的4倍。

1 个答案:

答案 0 :(得分:3)

我不知道numpy或scipy中的随机数生成器本身生成16或32位浮点数。

要避免大型临时,您可以批量生成值。例如,以下内容创建了一个包含{000}个float16值样本的数组。

In [125]: n = 10000000  # Number of samples to generate

In [126]: k = 10000     # Batch size

In [127]: a = np.empty(n, dtype=np.float16)

In [128]: for i in range(0, n, k):
   .....:     a[i:i+k] = np.random.normal(loc=0, scale=1, size=k)
   .....: