确定性中的pymc2和pymc3之间的区别

问题描述

我在pymc2中有这样的模型。

p = Uniform(name='p',lower=p_lowers,upper=p_uppers,value=p_values)
MIM_Model =  pm.Deterministic(eval = MIM_eval,name = 'NEE_Model',parents = {'p': p,'Csom_0': Csom_0,'Tave': Tave,'Tmax': Tmax,'Rg': Rg,'RH': RH,'VPD':VPD,'Lat':Lat,'a2': a2},doc = 'model construction',trace = True,verbose = 0,dtype = float,plot = False,cache_depth = 2)

所有变量(Rg':Rg,'RH':RH,'VPD':VPD,'Lat':Lat)都是数组。

def MIM_eval(p,Csom_0,Tave,Tmax,Rg,RH,VPD,Lat,a2):
  p1 = p[0]#*1.e5
  p2 = p[1]#*1.e5
  p3 = p[2]#*1.e5
  p4 = p[3]#*1.e5
  p5 = p[4]#*1.e5
....
  Lf[0][i] = p6*Cf_0
  Ln[0][i] = p8*Cn_0
  Lr[0][i] = p7*Cr_0
....
  _results = []
  for j in range(obs_size):
    tmp_result = []
    for k in idx[j]:
      tmp_result.append(round(all_results[j][0][k],8)) 
    _results.append(tmp_result)
  # Return the model result.
  return _results

这在pymc2中运行良好,但是我不能在pymc3中使用它,因为确定性中的参数必须是theano变量,我搜索了很多示例,但没有一个适合这种情况(因为参数太多); >

  • 在线示例中,theanovar太简单了...
 normal('v3',mu=mean,sigma=half_cauchy)
 # Deterministic variables can be used in usual way
 Deterministic('v3_sq',self.v3 ** 2)

在我的情况下,我尝试了以下操作,但是我不知道如何在pymc3中编写MIM_eval,导致确定性参数无法接收数组类型。

MIM_Model =  pm.Deterministic('MIM_Model',MIM_eval(p,Cf_0,Cr_0,Cw_0,Clit_0,Nt,Ta))
def MIM_eval(p,a2):
   # ???
   # can't return results

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)