Как интерполировать совокупные данные гистограммы? - PullRequest
1 голос
/ 10 мая 2019

Я получил набор гистограмм из numpy.histogram:

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

Результатами является массив формы (9, 10000) Значения бина - это годы от 2029 и 2066.Массив 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.    ]
...