猿问

从累积分布函数计算分布中位数

我有一个密度函数定义如下:


def f(x):

   if 0<=x<=1:

      return 0.5

   elif 1<x<=3:

      return 0.25

   else:

      return 0.0

我向量化了密度函数:


f = np.vectorize(f)

然后我定义了 X 数组


X = np.arange(-10,10,0.001)

最后,CDF:


def CDF(x):

   return quad(f, -np.inf,x)

CDF = np.vectorize(CDF)

CDF_calculated,err=CDF(X)

现在我想计算


median = np.round(X[np.where(CDF_calculated==0.5)][0])

我在这里写的正确吗?


繁花不似锦
浏览 148回答 1
1回答

阿晨1998

如果函数是已知的,我会使用它的解析积分。对于中值计算,我会使用类似二分法的方法(因为函数不平滑)import numpy as npfrom scipy.optimize import bisectdef f(x):&nbsp; &nbsp;if 0<=x<=1:&nbsp; &nbsp; &nbsp; return 0.5&nbsp; &nbsp;elif 1<x<=3:&nbsp; &nbsp; &nbsp; return 0.25&nbsp; &nbsp;else:&nbsp; &nbsp; &nbsp; return 0.0&nbsp;&nbsp;def cdf(x):&nbsp; &nbsp; if 0<=x<=1:&nbsp; &nbsp; &nbsp; &nbsp; return 0.5*x&nbsp; &nbsp; elif 1<x<=3:&nbsp; &nbsp; &nbsp; &nbsp; return 0.5 + 0.25*(x-1)&nbsp; &nbsp; elif x<0:&nbsp; &nbsp; &nbsp; &nbsp; return 0.0&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; return 1f = np.vectorize(f)cdf = np.vectorize(cdf)fbisect = lambda v: cdf(v) - 0.5median = bisect(fbisect,0,3)print(median)
随时随地看视频慕课网APP

相关分类

Python
我要回答