Рассчитать значения CDF в Python эффективно - PullRequest
0 голосов
/ 04 июня 2019

Я хотел бы найти значения CDF для точек в серии.Точки в ряду можно рассматривать как распределение между -10 и 10.

Моя первая попытка состояла в том, чтобы ранжировать значения ряда, а затем использовать ранги, чтобы получить значения CDF.Например;

rankedSeries = mySeries.rank()
CDF = rankedSeries/len(mySeries)

Но есть ли более быстрый способ с любыми встроенными функциями?Я буду делать это много раз с большими объемами данных, поэтому скорость важна

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Если вас интересует Эмпирическая функция распределения (EDF) вместо CDF для использования в Колмогорове Смирнове, Андерсоне Дарлинге или других тестах на пригодность, может помочь следующий код:

import numpy as np
import matplotlib.pyplot as plt
data = (np.random.rand(100)*20-10) ++(np.random.rand(100)*20-10)   +  (np.random.rand(100)*20-10)
data.sort()
plt.plot(data,np.arange(len(data)))
plt.show()```
0 голосов
/ 04 июня 2019

С помощью numpy.histogram создайте гистограмму массива. numpy.cumsum вычисляет CDF сгенерированной гистограммы. Для больших массивов это более эффективно, чем сортировка, с точки зрения времени обработки:

import numpy as np
import matplotlib.pyplot as plt

data = (np.random.rand(100)*20) - 10
bins = 20
hist, bin_edges = np.histogram (data, bins = bins)
cdf = np.cumsum(hist)
plt.plot(bin_edges[1:], cdf/cdf[-1])
plt.show()

CDF Plot

...