在Numpy / Scipy中,如何使用指定的(float)dtype
从正态分布生成随机数?就我而言,我需要float32
和float16
。
由于数组非常大,我不希望在采样后转换数组。
例如:
a = np.random.normal(1e7).astype('float16')
完成这项工作,但因为它需要一个临时的float64数组,所以它使用的RAM是直接float16
采样的4倍。
答案 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)
.....: