我正在尝试通过包装 Agner Fogs c++ 版本( https://www.agner.org/random/ )向 PyMC3(Wallenius 非中心超几何)添加一个新的离散分布。
我已经成功地将相关函数放在了一个 c++ 扩展中,并添加了广播,使其表现得像 scipy 的发行版。(目前广播是在 Python 中完成的。.. 稍后将尝试 xtensor-python 绑定以在 c++ 中实现更高性能的矢量化。)
我遇到了以下问题:当我在模型上下文中实例化新分布的 RV 时,我得到一个“TypeError:需要一个整数(获取类型 FreeRV)”,其中“值”传递给新分布的 logp() 函数。
我知道 PyMC3 可能需要将 RV 连接到函数,但我找不到将它们转换为我的新函数可以使用的东西的方法。
任何有关如何解决此问题的提示或向 PyMC3 添加新发行版的一般信息或发行版的内部工作都会非常有帮助。
提前致谢!简
编辑:我注意到 FreeRV 继承自 theanos TensorVariable,所以我尝试调用 .eval()。这会导致另一个错误,即没有连接输入。(我现在没有确切的错误信息)。令我困惑的一件事是为什么在设置模型时在变量的实例化时调用 logp ...