Tuesday, April 12, 2011

Kolmogorov 0-1 Law

    对于一个无穷随机序列{Xi},关于它的一个尾事件(tail event),发生的概率要么是0,要么是1,没有中间状态。
    那么,什么事尾事件呢?其标准定义可以参考Wikipedia:http://en.wikipedia.org/wiki/Kolmogorov_0-1_law。它定义在整个序列上,该事件和任意有限个随机变量之间独立,也就是说,该事件和任意有限个元素之间都是无关的,只存在于无穷随机序列的“尾巴”上。
    尾事件揭示了现代概率论的一个重要事实,尽管一个随机序列本身是捉摸不定的,但它的长期表现却是确定的。
    与Kolmogorov 0-1律相关的还有Hewitt-Savage 0-1 律:http://en.wikipedia.org/wiki/Hewitt%E2%80%93Savage_zero-one_law。说明的也是同一事实。

Saturday, April 2, 2011

一个Python引用引起的困惑

先来看一段程序:
funs = [lambda x: x**k for k in range(0, 4)]
res = [f(2) for f in funs]
print res
结果是什么呢?
结果是这样的:[8, 8, 8, 8],如果不感到意外,说明你已经理解了python,或者没看懂:)
如果意外,请看下面的分析:
实际上,[lambda x: x**k for k in range(0, 4)],创建了4个lambda表达式,每个表达式都是
lambda x: x**k,而k最终是等于3。于是4个lambda表达式都是lambda x: x**3 !
怎样才能根据不同的k生成不同的表达式呢?原因是要对k生成多个对象!!
函数的参数是作为引用传入的,因此我们可以对lambda表达式增加一个参数,k:
funs = [lambda x, k=k: x**k for k in range(0, 4)]
重新运行程序,得到res的值为
[1, 2, 4, 8]!
神奇的python!
如果你是一个python程序员,不清楚python的引用机制,你将时常困惑。