【问题标题】:given percentiles find distribution function python给定百分位数找到分布函数python
【发布时间】:2020-09-28 09:43:31
【问题描述】:

https://stackoverflow.com/a/30460089/2202107,我们可以生成正态分布的CDF:

import numpy as np
import matplotlib.pyplot as plt

N = 100
Z = np.random.normal(size = N)
# method 1
H,X1 = np.histogram( Z, bins = 10, normed = True )
dx = X1[1] - X1[0]
F1 = np.cumsum(H)*dx
#method 2
X2 = np.sort(Z)
F2 = np.array(range(N))/float(N)

# plt.plot(X1[1:], F1)
plt.plot(X2, F2)
plt.show()

问题:我们如何生成“原始”正态分布,只给定x (eg X2)y (eg F2) 坐标?

【问题讨论】:

    标签: python numpy statistics


    【解决方案1】:

    我的第一个想法是plt.plot(x,np.gradient(y)),但是 y 的梯度全为零(数据点在 y 中均匀分布,但在 x 中不均匀)这种数据在百分位数计算中经常遇到。关键是使用插值使数据在 x 中而不是 y 中均匀分布:

    x=X2
    y=F2
    num_points=10
    
    xinterp = np.linspace(-2,2,num_points)
    yinterp = np.interp(xinterp, x, y)
    
    # for normalizing that sum of all bars equals to 1.0
    tot_val=1.0
    normalization_factor = tot_val/np.trapz(np.ones(len(xinterp)),yinterp)
    
    plt.bar(xinterp, normalization_factor * np.gradient(yinterp), width=0.2)
    plt.show()
    

    输出看起来不错:

    我把我的方法放在这里进行检查。让我知道我的逻辑是否有缺陷。

    一个问题是:当num_points很大时,情节看起来很糟糕,但这是离散化的问题,不知道如何避免。

    相关帖子:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2018-11-11
      • 2014-09-06
      • 1970-01-01
      相关资源
      最近更新 更多