如何在 SciPy 中预先计算冻结随机变量的常量?

问题描述 投票:0回答:1

我定义了一个自定义连续分布,并实现了

_pdf
_cdf
方法。 对于这些,我需要计算昂贵的常数(给定参数),即 PDF 的归一化常数和 CDF 的积分常数。每次评估(冻结)随机变量的任何函数时都会计算这些常数,这需要大量时间。

我想知道是否有一种方法可以为 SciPy 中的冻结随机变量预先计算或缓存/记忆这些昂贵的常量?

这里是一个示例分布的一些最小代码,其参数

a
b
由非标准化 PDF
f(x, a, b)
及其反导数
F(x, a, b)
定义。昂贵的函数是范数
N(a,b)
和积分常数
C(a,b)
:

from scipy.stats import rv_continuous


class Example_gen(rv_continuous):

    def _norm(self, a, b):
        """Expensive function"""
        return N(a, b)

    def _C(self, a, b):
        """Expensive function"""
        return C(a, b)

    def _pdf(self, x, a, b):
        return f(x, a, b) / self._norm(a, b)

    def _cdf(self, x, a, b):
        return (F(x, a, b) + self._C(a, b)) / self._norm(a, b)


Example = Example_gen()
python scipy memoization scipy.stats precompute
1个回答
0
投票

没有。当然,如果您考虑的特定分布定义了一些内部函数,您就可以对它们进行猴子修补以返回预先计算的值。但这肯定不受框架支持,如果你这样做,你就得靠自己了。

© www.soinside.com 2019 - 2024. All rights reserved.