Python 具有非theano函数的pymc3似然数学

Python 具有非theano函数的pymc3似然数学,python,theano,bayesian,pymc3,Python,Theano,Bayesian,Pymc3,我不熟悉贝叶斯推理。我正在尝试将我编写的网格搜索代码改编为贝叶斯蒙特卡罗马尔可夫链方法,我正在使用PyMC3。我的问题是代码必须调用一个不能用无语法重写的函数。(该函数依赖于f2py包装中的一段Fortran代码。) 以下是我正在使用的代码: with pm.Model() as model: # Independent parameters x = pm.Normal('x', sx, sd=incx*float(nrangex)/2.0) y = pm.Normal(

我不熟悉贝叶斯推理。我正在尝试将我编写的网格搜索代码改编为贝叶斯蒙特卡罗马尔可夫链方法,我正在使用PyMC3。我的问题是代码必须调用一个不能用无语法重写的函数。(该函数依赖于f2py包装中的一段Fortran代码。)

以下是我正在使用的代码:

with pm.Model() as model:
    # Independent parameters
    x = pm.Normal('x', sx, sd=incx*float(nrangex)/2.0)
    y = pm.Normal('y', sy, sd=incy*float(nrangey)/2.0)
    depth = pm.Normal('depth', sdepth, sd=incdepth*float(nrangedepth)/2.0)
    length = pm.Normal('length', slength, sd=inclength*float(nrangelength)/2.0)
    width = pm.Normal('width', swidth, sd=incwidth*float(nrangewidth)/2.0)
    strike = pm.Normal('strike', sstrike, sd=incstrike*float(nrangestrike)/2.0)
    dip = pm.Normal('dip', sdip, sd=incdip*float(nrangedip)/2.0)
    rake = pm.Normal('rake', srake, sd=incrake*float(nrangerake)/2.0)

    # Model (This is the part that doesn't work.)
    los_disp =  zne2los(getdisp(lon2km(dsidata['lon'], x), lat2km(dsidata['lat'], y), depth, length, width, strike, dip, rake))

    # Likelihood
    odisp = pymc3.Normal('los_disp', mu = los_disp, sd = 0.5, observed = dsidata['disp'])

    # Sampling
    trace = pm.sample(100)
该代码试图做的是从地面位移数据反演震源参数。dsidata数据框包含作为纬度和经度函数的地面位移数据。我正试图求解八个震源参数,它们能产生最适合地表位移的结果

getdisp函数无法为theano重写,因为它调用了一段Fortran语言,可以根据震源参数对地表位移进行正向建模。有没有办法将非theano代码编译成theano格式?还有别的办法吗


因为我是新手,我找不到很多好的例子,代码中可能还有其他错误。我还犯了其他错误吗?

是的,pymc3文档非常糟糕,如果你不是在一个不需要很多示例的简单案例中,你就不会在web上找到示例。。。这是一个问题,pymc3模块看起来很好,但我确信我只使用了他容量的10%,因为没有可靠的文档。。。我在pymc3上经历了几次这样的难题(例如),每次我至少放松几周。。。同时,如果没有pymc3,你还有希望吗?例如pymc2?