如何在Python中计算质量分布?

时间:2018-08-21 06:54:42

标签: python statistics

质量分布定义如下。

Mass distribution

f是连续变量的概率密度函数。

给出一组保存在列表中的数据值,如何近似该功能?由于分子和分母中的积分与分布的期望值相同,因此我们可以按以下方式使用基于样本均值的方法吗?

def get_mass_distribution(values):
    x = np.linspace(0, max(values), max(values))
    mean = sum(values)/len(values)
    mass = []
    values.sort()
    for i in range(len(values)):
        mass.append(sum(values[0:i+1])/(mean*(i+1)))

    return x, mass

1 个答案:

答案 0 :(得分:0)

您应该使用梯形法则来近似该积分。

def get_mass_distribution(data):
    a = np.array(data)
    ag = st.gaussian_kde(a)

    denom_integral = trapezoidal(ag, 0, max(data), max(data)*10)

    Fm = [0]

    x = []
    k = 0
    while(k < max(data)):
        x.append(k)
        k = k+1


    for i in x[1:]:
        enum_integral = trapezoidal(ag, 0, i, i*10)
        Fm.append(enum_integral/denom_integral)

    return x, Fm

def trapezoidal(ag, a, b, n):
    h = float(b - a) / n
    s = 0.0
    s += a*ag(a)[0]/2.0
    for i in range(1, n):
        s += (a + i*h)*ag(a + i*h)[0]
    s += b*ag(b)[0]/2.0
    return s * h