我有一個密度函數(shù)定義如下:def f(x): if 0<=x<=1: return 0.5 elif 1<x<=3: return 0.25 else: return 0.0我向量化了密度函數(shù):f = np.vectorize(f)然后我定義了 X 數(shù)組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)現(xiàn)在我想計算median = np.round(X[np.where(CDF_calculated==0.5)][0])我在這里寫的正確嗎?
1 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
如果函數(shù)是已知的,我會使用它的解析積分。對于中值計算,我會使用類似二分法的方法(因為函數(shù)不平滑)
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)
添加回答
舉報
0/150
提交
取消