Scipy 生成截断正态分布随机数

生成 [a, b] 上的截断正态分布的随机数 N(\mu, \sigma^2)

定义好

clip_a  # a
clip_b  # b
mean  # \mu
std  # \sigma

接着

a, b = (clip_a - mean) / std, (clip_b - mean) / std
scipy.stats.truncnorm(a, b, loc=mean, scale=std)

例子:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import truncnorm

# 生成 [-1, 1] 上 N(1, 4) 的截断正态分布
clip_a, clip_b = -1, 1
mean = 1
std = 2
a, b = (clip_a - mean) / std, (clip_b - mean) / std
dist = truncnorm(a, b, loc=mean, scale=std)

x_range = np.linspace(-1, 1, 100)
plt.plot(x_range, dist.pdf(x_range))
sns.histplot(dist.rvs(size=100000), stat="density")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容