gpt4 book ai didi

python - 使用 numpy.random.normal 时如何指定上限和下限

转载 作者:IT老高 更新时间:2023-10-28 22:20:48 25 4
gpt4 key购买 nike

我希望能够从仅介于 0 和 1 之间的正态分布中选择值。在某些情况下,我希望能够基本上只返回一个完全随机的分布,而在其他情况下,我想返回值呈高斯形状。

目前我正在使用以下功能:

def blockedgauss(mu,sigma):
while True:
numb = random.gauss(mu,sigma)
if (numb > 0 and numb < 1):
break
return numb

它从正态分布中选择一个值,如果它超出 0 到 1 的范围,则将其丢弃,但我觉得必须有更好的方法来做到这一点。

最佳答案

听起来你想要一个 truncated normal distribution .使用 scipy,您可以使用 scipy.stats.truncnorm从这样的分布中生成随机变量:

import matplotlib.pyplot as plt
import scipy.stats as stats

lower, upper = 3.5, 6
mu, sigma = 5, 0.7
X = stats.truncnorm(
(lower - mu) / sigma, (upper - mu) / sigma, loc=mu, scale=sigma)
N = stats.norm(loc=mu, scale=sigma)

fig, ax = plt.subplots(2, sharex=True)
ax[0].hist(X.rvs(10000), normed=True)
ax[1].hist(N.rvs(10000), normed=True)
plt.show()

enter image description here

上图为截断正态分布,下图为均值mu和标准差sigma相同的正态分布。

关于python - 使用 numpy.random.normal 时如何指定上限和下限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com