首页 > 解决方案 > symfit 上的 Scipy 分布?

问题描述

我认为标题是自我解释的。

我真的想使用已经在 scipy.stats 上实现的几个 pdf 作为 symfit 模型的模型,例如CrystalBallJohnson函数。我尝试过使用以下代码的高斯分布:

x = Variable('x') 
mu = Parameter('mu') 
sigma = Parameter('sigma') 
model_sci = stats.norm.pdf(y, mean, sigma)

但我得到以下TypeError

TypeError:无法确定关系的真值

我相信这是因为 scipy 分发需要数字(或带有数字的可迭代对象)而不是 sympy 产生的符号。是否有可能使用此发行版而不是手动实现它们?

标签: pythonscipysymfit

解决方案


可以使用 a 来做到这一点CallableNumericalModel

x = Variable('x') 
y = Variable('y') 
mu = Parameter('mu') 
sigma = Parameter('sigma') 

model_sci = lambda x, mu, sigma: stats.norm.pdf(x, mu, sigma)

model = CallableNumericalModel({y: model_sci}, connectivity_mapping={y: {x, mu, sigma}})

推荐阅读