如何在Python中基于最小值、最大值和可能值生成阶梯分布值?

如何在Python中基于最小值、最大值和可能值生成阶梯分布值?,python,numpy,math,probability,Python,Numpy,Math,Probability,概率密度函数由三个参数定义:最小值、中值和最大值[Codling等人] 我需要根据这些值生成一个分布值(PDF)y=f(x)。我知道这个函数:numpy.heaviside,但不能正确使用它 示例:7.5为最小值,11.4为可能值,21.7为最大值 我所期望的是: 根据从0到1的随机样本,分布条件将为0.5。数值范围从最小值到可能值[0.5]。例如: x = random.rand(size) sample = [] for s in x: if s > 0.5:

概率密度函数由三个参数定义:最小值、中值和最大值[Codling等人]

我需要根据这些值生成一个分布值(PDF)y=f(x)。我知道这个函数:numpy.heaviside,但不能正确使用它

示例:7.5为最小值,11.4为可能值,21.7为最大值

我所期望的是:

根据从0到1的随机样本,分布条件将为0.5。数值范围从最小值到可能值[0.5]。例如:

x = random.rand(size)

sample = []

for s in x:
    if s > 0.5:
        y = 2*(s-0.5)*(max-med)
        sample.append(y)
    else:
        y = 2*s*(med-min)
        sample.append(y)
如果随机样本低于0.5,则该值必须在最小到可能的范围内,如果样本高于0.5,则该值必须从中值到最大值

if sample = 0.35, then value has to be from 7.5 to 11.4
例如:

x = random.rand(size)

sample = []

for s in x:
    if s > 0.5:
        y = 2*(s-0.5)*(max-med)
        sample.append(y)
    else:
        y = 2*s*(med-min)
        sample.append(y)
但它从未达到最小值或最大值


Codling等人,使用作业报告数据进行概率井时估计

您是否希望定义分段常数函数

您可以通过组合几个
np.heaviside
函数来实现这一点:

def pdf1(x, minimum, median, maximum):
    h = np.heaviside
    return (
        h(x - minimum, 0) * h(-(x - median),  0) / (median - minimum) / 2
      + h(x - median,  0) * h(-(x - maximum), 0) / (maximum - median) / 2
    )
您也可以使用
np。分段

def pdf2(x, minimum, median, maximum):
    return np.piecewise(
        x,
        [(minimum <= x) * (x < median), (median <= x) * (x < maximum)],
        [1 / (median - minimum) / 2, 1 / (maximum - median) / 2]
    )

这回答了你的问题吗?不,它只有三个参数,不是样本…看看第二个答案:(1)在第一个和第二个箱子之间随机选择(2)如果选择了第一个箱子,则从(最小值,中值)均匀取样,如果选择了第二个箱子,则从(中值,最大值)均匀取样。我想你没有回答这个问题,这是一个PDF,概率函数,你的建议与我的期望不同。或者我误解了。你能添加一个答案吗?你能用一个例子来更新你的问题,说明你打算如何使用你希望得到的PDF文件吗?