将数据中找到的元素拟合到其累积分布时出错

时间:2017-04-05 06:26:09

标签: python numpy matplotlib scipy

我有一个大的模拟数据集,我在其中传递了值,而不是用于分析。我的主要目标是获取实际的实际记录值,并通过累积分布将其与模拟数据进行比较。

我首先定义了通过获取具有特定值x的值来遍历数据集的每个bin的方法,并将其匹配到" real"使用相同的值x

分析数据
bins = np.linspace(SimData.min(),SimData.max(), 24)

def CumuProb(SimData, bins, x, realValue):
    h, bins_ = np.histogram(be, bins=bins)
    hcum = np.cumsum(h)/float(np.cumsum(h).max())

    cbins = np.zeros(len(bins)+1)
    cbins[1:-1] = bins[1:]-np.diff(bins[:2])[0]/2.
    cbins[-1] = bins[-1]

    hcumc = np.linspace(0,1, len(cbins))
    hcumc[1:-1] = hcum

    p = [x, realValue]

    yi = np.interp(p[1],cbins, hcumc)
    return [p[1],yi]

此方法适用于较大的值。但是,如果我通过值<< 1<<<<<<<<<<<<<

例如,使用此方法对我的项目执行:

enter image description here

你可以在最底部看到它们是2点,当它们在蓝线上时应该是大约10点(实际数据)。

主要罪魁祸首来自此追溯: RuntimeWarning: invalid value encountered in divide hcum = np.cumsum(h)/float(np.cumsum(h).max())

所以这必须做我最有可能定义我的bin大小,它是在bin=np.linspace(np.log(binding).min(),np.log(binding).max(),24)定义的,它通过上图中的对数x轴值进行分箱。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我不能百分百肯定,因为这个问题缺少很多相关信息,但从I intended to use this function的判断来看,将realValue放入插值似乎很奇怪。如果,顾名思义,x是要调查的数据点的x轴值,则插值应采用x

yi = np.interp(x,cbins, hcumc)
return [x,yi]