【问题标题】:Calculating Distribution Median from Cumulative Distribution Function从累积分布函数计算分布中位数
【发布时间】:2020-07-18 14:08:41
【问题描述】:

我的密度函数定义如下:

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])

我在这里写的对吗?

【问题讨论】:

  • 只是集成功能:-)(可能不是你想要的,但它是你问题的答案)
  • @ Jan 谢谢。我想把它分成小部分然后问。我对其进行了编辑并提出了主要问题。
  • 如果函数是已知的,我只会“手动”定义函数
  • 函数f是否提前知道?
  • @JanStránský 是的。

标签: python numpy scipy statistics


【解决方案1】:

如果函数是先验已知的,我会使用它的解析积分。 对于中值计算,我会使用类似二分法的方法(因为函数不平滑)

import numpy as np
from scipy.optimize import bisect

def f(x):
   if 0<=x<=1:
      return 0.5
   elif 1<x<=3:
      return 0.25
   else:
      return 0.0

  
def cdf(x):
    if 0<=x<=1:
        return 0.5*x
    elif 1<x<=3:
        return 0.5 + 0.25*(x-1)
    elif x<0:
        return 0.0
    else:
        return 1


f = np.vectorize(f)
cdf = np.vectorize(cdf)

fbisect = lambda v: cdf(v) - 0.5

median = bisect(fbisect,0,3)
print(median)

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2012-08-15
    • 2015-04-27
    • 2012-06-08
    • 2014-08-14
    • 2022-01-22
    相关资源
    最近更新 更多