为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2023-03-16 16:14:29
我有一个密度函数定义如下: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])我在这里写的正确吗?
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


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)


查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号