此处,我们假定2-维离散型随机向量的联合分布律为
即随机变量取个值,取个值,将的联合分布中的概率值构成一个的矩阵,记为,即
1. 联合分布律的表示
Python的scipy.stats包并未提供2-维分布,但numpy包的array数组类对象却能很好地表示这样的2-维离散型随机向量的联合分布律。
例1 从含有3个正品,2个次品的5个产品中依次无放回地抽取两个。设表示第1次取到的次品个数,表示第2次取到的次品个数。求的联合分布律。
解:显然,和的所有可能取值均为。由于是无放回抽取,
,,
,。
于是,的联合分布律中由概率构成的矩阵。下列代码在Python中表示。
import numpy as np #导入numpy
from sympy import Rational as R #导入Rational
Pxy=np.array([[R(3,10), R(3,10)], #创建2-维数组Pxy
[R(3,10), R(1,10)]])
print(Pxy) #输出2-维数组
第3~4行创建一个名为Pxy的array类对象,将其设置为两个等长的数组的数组,从而构成一个矩阵。Pxy中的每一个元素设置为表示有理数的Rational对象(第2行导入,别名为R)。运行该程序,输出
[[3/10 3/10]
[3/10 1/10]]
2. 边缘分布的计算
由上例可见,numpy的array类对象可将矩阵表示为2-维数组——数组的数组。2-维数组有两个“轴”:纵向记为axis=0,横向记为axis=1,如下图所示。
为计算变量及的边缘分布律,可调用array类对象Pxy的sum函数,指定按行对列标j(axis=1)相加得到的边缘分布律,这是一个具有个元素的数组,记为;按列对行标i(axis=0)相加得的边缘分布律,是一个具有个元素的数组,记为。下列程序定义了按此方法根据联合分布律计算边缘分布律和的Python函数。
import numpy as np #导入numpy
def margDist(Pxy): #定义计算边缘分布的函数
Px=Pxy.sum(axis=1) #按行相加得X分布律
Py=Pxy.sum(axis=0) #按列相加得Y分布律
return (Px.reshape(Px.size, 1), #返回Px,Py
Py.reshape(1, Py.size))
程序中第2~6行定义了用于根据的联合分布律计算和的边缘分布的函数margDist。参数Pxy是组织为2-维数组的的联合分布律。第3行、第4行分别对Pxy按行相加和按列相加得到、的边缘分布律存于Px和Py。第5~6行将Px,Py作为返回值返回。需要提及的是,为将array类对象表示的1-维数组,设置为一个列向量或行向量,以便与2-维数组表示的矩阵进行统一的运算,要调用该数组的reshape函数。因此,第5行返回的Px为列向量,Py为行向量。
例2 计算例1中2-维随机向量的边缘分布律。
解:由例1知,的联合分布律中概率矩阵为。下列代码在Python中表示,按行对列标求和得得边缘分布概率序列,按列对行标求和得的边缘分布概率序列。
下列代码计算例1的随机向量中和的边缘分布。
import numpy as np #导入numpy
from sympy import Rational as R #导入Rational
Pxy=np.array([[R(3,10), R(3,10)], #创建联合分布律Pxy
[R(3,10), R(1,10)]])
Px, Py=margDist(Pxy) #计算边缘分布律
print('Px:%s'%Px)
print('Py:%s'%Py)
第3~4行设置的联合分布律的概率矩阵Pxy。第5行调用上列程序定义的函数margDist,计算结果赋予Px,Py。运行程序,输出
Px:[[3/5]
[2/5]]
Py:[[3/5 2/5]]