我想找到一系列点的CDF值。该系列中的点可以认为是-10到10之间的分布。
我的第一个尝试是对系列的值进行排名,然后使用这些排名来获取CDF值。例如;
rankedSeries = mySeries.rank()
CDF = rankedSeries/len(mySeries)
但是使用内置函数是否有更快的方法?我将使用大量数据进行很多次,因此速度很重要
答案 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()
答案 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()```