You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效生成大参数下的Bates分布随机数?

高效生成大参数Bates分布随机数的方法

Bates分布定义为n个独立[0,1]均匀分布随机变量的均值,等价于Irwin-Hall分布(n个均匀变量的和)除以n。针对n极大(如10000000)的场景,直接生成n个均匀变量再取均值的方法内存开销巨大、耗时极长,以下是两种可行的优化方案:

1. 正态近似法(推荐,超高效)

当n足够大时,根据中心极限定理,Bates分布会近似服从正态分布,参数为:

  • 均值:$\mu = 0.5$
  • 方差:$\sigma^2 = \frac{1}{12n}$

直接用正态分布生成样本即可,n越大,近似效果越好。Python代码示例:

import numpy as np

m = 10000
n = 10000000

mu = 0.5
sigma = np.sqrt(1 / (12 * n))
bates_random_numbers = np.random.normal(mu, sigma, size=m)

这种方法时间复杂度为O(m),完全不依赖n的大小,彻底避开了生成海量均匀变量的开销。

2. 精确生成方案(仅需严格精确性时考虑)

如果必须生成严格符合Bates分布的样本,可先生成Irwin-Hall分布的随机数(n个均匀变量的和),再除以n。但n极大时,Irwin-Hall分布本身已趋近于正态分布,近似法的精度完全满足绝大多数场景需求;且针对n=1e7这种量级,即使是Irwin-Hall的高效生成方法也难以匹敌正态近似的效率。

原代码的小优化(仅适用于小n场景)

若处理的n不算极端大,可通过numpy向量化操作替代列表推导提升原代码效率:

a = np.random.uniform(0, 1, size=(m, n))
bates_random_numbers = a.mean(axis=1)

但该方法在n=1e7时会直接耗尽内存(需存储1e11个浮点数),仅适合小n场景。

内容的提问来源于stack exchange,提问作者shaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:25:29