我有一个大的模拟数据集,我在其中传递了值,而不是用于分析。我的主要目标是获取实际的实际记录值,并通过累积分布将其与模拟数据进行比较。
我首先定义了通过获取具有特定值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<<<<<<<<<<<<<
例如,使用此方法对我的项目执行:
你可以在最底部看到它们是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轴值进行分箱。
我该如何解决这个问题?
答案 0 :(得分:0)
我不能百分百肯定,因为这个问题缺少很多相关信息,但从I intended to use this function的判断来看,将realValue
放入插值似乎很奇怪。如果,顾名思义,x
是要调查的数据点的x轴值,则插值应采用x
:
yi = np.interp(x,cbins, hcumc)
return [x,yi]