Python 具有给定均值的截断正态分布

Python 具有给定均值的截断正态分布,python,scipy,statistics,probability,distribution,Python,Scipy,Statistics,Probability,Distribution,在python中,是否可以生成具有给定期望值的截断正态分布?我知道scipy.stats.truncnorm可以给出一个截断正态分布,将原始正态分布的平均值作为参数,但我想创建一个截断正态分布,这样截断分布的期望值就是一个特定值。这可能吗?您可以在mu和mean之间进行转换,有关详细信息,请参阅, 对于平均值,有一个简单的表达式,要得到μ,你必须解非线性方程 import scipy from scipy.stats import norm def get_mean(mu, sigma, a,

在python中,是否可以生成具有给定期望值的截断正态分布?我知道scipy.stats.truncnorm可以给出一个截断正态分布,将原始正态分布的平均值作为参数,但我想创建一个截断正态分布,这样截断分布的期望值就是一个特定值。这可能吗?

您可以在
mu
和mean之间进行转换,有关详细信息,请参阅, 对于平均值,有一个简单的表达式,要得到μ,你必须解非线性方程

import scipy
from scipy.stats import norm

def get_mean(mu, sigma, a, b):
    alpha = (a - mu)/sigma
    beta  = (b - mu)/sigma
    Z     = norm.cdf(beta) - norm.cdf(alpha)
    return mu + (norm.pdf(alpha) - norm.pdf(beta)) / Z

def f(x, mean, sigma, a, b):
    return mean - get_mean(x, sigma, a, b)

def get_mu(mean, sigma, a, b):
    mu = scipy.optimize.brentq(f, a, b, args=(mean, sigma, a, b))
    return mu

a  = -2.0
b  = 3.0
sigma = 1.0
mu    = 0.0

mean = get_mean(mu, sigma, a, b)
print(mean)

mu = get_mu(mean, sigma, a, b)
print(mu)

从所需平均值中获取
mu
后,您可以将其放入采样例程中

您在回答中指向的wiki页面给出的平均值为mu+(pdf(alpha)-pdf(beta))*(1/Z)*sigma。所以如果我把它和你的均值函数比较,我觉得你缺少一个σ。