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下载。