scipy의 rv_continuous에 추가 매개변수 로드

Oct 31 2020

나는 연속적이고 비분석적인 랜덤 변수에 대한 몇 가지 기본 대수학을 할 계획입니다. 확률 밀도 함수를 배열 x 및 f(x)로 정의하고 싶습니다.

그러나 두 pdf의 합계 또는 곱 분포를 계산하는 것과 같은 기본 작업을 수행하는 패키지가 없는 것 같아서 놀랐습니다(틀린 경우 수정해 주세요). 혼자하는 작업을 구현하기 위해, 나는 그 다음, rv_continuous scipy.stats의 서브 클래스를 만들 계획 이 스레드 :

import scipy as sp
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        self.x = x
        self.p = p

    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)

init 메서드를 덮어쓰는 것은 아마도 올바른 방법이 아니기 때문에 마지막 줄에서 오류가 발생합니다. rv_continuous에 추가 매개변수를 전달하거나 처음부터 모든 것을 구축하는 것 외에 문제에 접근하는 다른 방법이 있습니까?

답변

cel Nov 02 2020 at 23:20

이것은 나를 위해 작동하는 것 같습니다 :

import scipy as sp
import scipy.stats
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        super().__init__(a=x.min(), b=x.max())
        self.x = x
        self.p = p
    
    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)
my_cv.cdf(0.5)