3.5 CDF的表示
我编写了一个Cdf
模块,提供了用于表示CDF的Cdf
类。该模块的文档在http://thinkstats.com/Cdf.html,也可以从http://thinkstats.com/Cdf.py下载。
Cdf是用两个有序列表xs
和ps
实现的:其中xs
列出了值,ps
列出了概率。Cdf中最重要的方法如下所示。
Prob(x)
对于给定值x,计算概率p=CDF(x)。
Value(p)
对于给定概率p,计算相应的值x,也就是p=CDF(x)的逆运算。
因为xs
和ps
都经过了排序,所以上述操作都可以使用对分算法,效率很高。运行时间跟值数量的对数成正比,详见http://wikipedia.org/wiki/Time_complexity。
Cdf还有Render
方法,它会返回xs
和ps
列表,可以用于绘制CDF图。因为CDF是一个阶跃函数,所以分布中的每个值都会在这两个列表中分别有对应的元素。
Cdf
模块还提供了几个生成Cdf的函数,包括MakeCdfFromList
,以一串值为参数,返回它们的Cdf。
最后要说一下,myplot.py中的Cdf
和Cdfs
函数可以绘制Cdf折线图。
习题3-5
下载Cdf.py和relay.py(参见习题3-2),画出跑步速度的CDF图。哪个函数可以更好地看出分布形状,是PMF还是CDF?代码可以从http://thinkstats.com/relay_cdf.py下载。