如何对累积直方图数据进行插值?

时间:2019-05-10 12:49:12

标签: python matplotlib scipy histogram interpolation

我从numpy.histogram得到了一组直方图:

probas, years = zip(*[np.histogram(r, bins= bin_values)  for r in results])

results是形状的数组(9, 10000)。bin值是从20292066开始的年份。 probas数组具有形状(9,37)years数组(9,38)。因此years[:,:-1]的形状为(9,37)

我可以使用以下方法获取累积直方图数据:

probas = np.cumsum(probas, axis=1)

然后我可以将其标准化为[0,1]:

probas = np.asarray(probas)
probas = probas/np.max(probas, axis = 0)

然后我尝试使用scipy内插该累积分布:

inverse_pdfs = [scipy.interpolate.interp1d(probas[i], years[i,:-1]) for i in range(probas.shape[0])]

当我使用以下命令将数据集的第三条直方图绘制为plt.plot()并从inverse_pdfs绘制时:

i = 2
plt.plot(years[i,:-1], probas[i], color="orange")
probability_range = np.arange(0.,1.01,0.01)
plt.plot([inverse_pdfs[i](p) for p in probability_range], probability_range, color="blue")

我获得:

enter image description here

如您所见,在2042年之后的大多数年中,这场比赛的表现都不错,但在此之前非常糟糕。

任何有关如何改善匹配度或问题出处的建议都将受到欢迎。

有关信息,用于在第三个直方图上训练插值器的数据是:

years[2,:-1]: [2029. 2030. 2031. 2032. 2033. 2034. 2035. 2036. 2037. 2038. 2039. 2040.
 2041. 2042. 2043. 2044. 2045. 2046. 2047. 2048. 2049. 2050. 2051. 2052.
 2053. 2054. 2055. 2056. 2057. 2058. 2059. 2060. 2061. 2062. 2063. 2064.
 2065.]

probas[2]:[0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
 0.     0.     0.     0.0916 0.2968 0.4888 0.6666 0.8335 0.9683 1.
 1.     1.     1.     1.     1.     1.     1.     1.     1.     1.
 1.     1.     1.     1.     1.     1.     1.    ]

0 个答案:

没有答案