如何用Python高效生成指定范围内的正态分布随机数?(正态分布.随机数.范围内.高效.如何用...)
高效生成指定范围内的正态分布随机数:python & numpy
本文介绍如何使用Python的NumPy和SciPy库高效生成限定在特定范围内的正态分布随机数。许多应用场景需要在保证随机数服从正态分布的同时,限制其数值范围(例如,所有值必须介于0到1之间)。直接使用numpy.random.normal无法满足此需求。
传统的循环生成并丢弃的方法效率低下,尤其在大样本量的情况下。 更优的方案是利用SciPy的scipy.stats.truncnorm函数。该函数能够生成截断正态分布随机数,即限制在指定上下限范围内的正态分布随机数。
以下代码演示如何使用scipy.stats.truncnorm生成介于0和1之间的正态分布随机数:
import matplotlib.pyplot as plt import scipy.stats as stats lower, upper = 0, 1 # 设置下限和上限 mu, sigma = 0.5, 0.2 # 设置均值和标准差 # 计算截断参数 a = (lower - mu) / sigma b = (upper - mu) / sigma # 生成截断正态分布 X = stats.truncnorm(a, b, loc=mu, scale=sigma) # 生成10000个随机数 samples = X.rvs(10000) # 绘制直方图 plt.hist(samples, bins=50) plt.title('截断正态分布 (0, 1)') plt.xlabel('数值') plt.ylabel('频率') plt.show()
代码首先定义了上下限(0和1)以及正态分布的均值和标准差。 然后计算truncnorm函数所需的截断参数a和b。最后,使用rvs方法生成10000个随机数,并用直方图可视化结果。 这种方法比循环丢弃法更高效,尤其在需要大量样本时。 通过调整mu和sigma参数,可以灵活控制生成的随机数的分布形状。
以上就是如何用Python高效生成指定范围内的正态分布随机数?的详细内容,更多请关注知识资源分享宝库其它相关文章!