最后,这就是我所做的:
F是cdf,f是pdf
F(5,5)= F(5,4)F(4,5) – 2 * F(4,4)f(5,5)
并循环遍及整个表面,您可以得到结果.
代码如下所示:
def cdf_from_pdf(pdf):
if not isinstance(pdf[0], np.ndarray):
original_dim = int(np.sqrt(len(pdf)))
pdf = pdf.reshape(original_dim,original_dim)
cdf = np.copy(pdf)
xdim, ydim = cdf.shape
for i in xrange(1,xdim):
cdf[i,0] = cdf[i-1,0] + cdf[i,0]
for i in xrange(1,ydim):
cdf[0,i] = cdf[0,i-1] + cdf[0,i]
for j in xrange(1,ydim):
for i in xrange(1,xdim):
cdf[i,j] = cdf[i-1,j] + cdf[i,j-1] - cdf[i-1,j-1] + pdf[i,j]
return cdf
这是一个非常粗略的近似,您可以通过将/ – equantion更改为集成来完善结果.
至于原始值和边距,cdf [0,:]和cdf [:,0],您也可以使用集成.就我而言,它非常小,所以我只使用pdf值.
您可以通过绘制cdf来测试函数,或者检查cdf [n,n]处的值