在Python中高效地计算pf CDF的值

时间:2019-06-04 00:31:43

标签: python cdf

我想找到一系列点的CDF值。该系列中的点可以认为是-10到10之间的分布。

我的第一个尝试是对系列的值进行排名,然后使用这些排名来获取CDF值。例如;

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

但是使用内置函数是否有更快的方法?我将使用大量数据进行很多次,因此速度很重要

2 个答案:

答案 0 :(得分:0)

借助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

答案 1 :(得分:0)

如果您对经验分布函数(EDF)而不是CDF感兴趣,可用于Kolmogorov Smirnov,Anderson Darling或其他拟合优度检验,则以下代码可能会有所帮助:

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()```