Python 在浮动32/16中生成正常随机数
在Numpy/Scipy中,如何从具有指定(浮点)Python 在浮动32/16中生成正常随机数,python,random,numpy,scipy,Python,Random,Numpy,Scipy,在Numpy/Scipy中,如何从具有指定(浮点)dtype的正态分布生成随机数?在我的情况下,我需要float32和float16 由于数组非常大,我不希望在采样后转换数组 例如: a = np.random.normal(1e7).astype('float16') 做这项工作,但由于它需要一个临时的float64数组,它使用的RAM是直接float16采样的4倍。我不知道numpy或scipy中有哪种随机数生成器可以在本机生成16或32位浮点 为了避免较大的临时值,可以成批生成值。例如,
dtype
的正态分布生成随机数?在我的情况下,我需要float32
和float16
由于数组非常大,我不希望在采样后转换数组
例如:
a = np.random.normal(1e7).astype('float16')
做这项工作,但由于它需要一个临时的float64数组,它使用的RAM是直接
float16
采样的4倍。我不知道numpy或scipy中有哪种随机数生成器可以在本机生成16或32位浮点
为了避免较大的临时值,可以成批生成值。例如,下面创建了一个10000000个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)
.....:
我接受这个答案,因为精确的就地操作是不可能的,这个解决方案是在不使用太多RAM的情况下生成一个大的随机数数组的最佳方法。