我已经定义了一个自定义的连续分布,并实现了_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()
字符串
2条答案
按热度按时间voase2hg1#
当然,如果你考虑的特定发行版定义了一些内部函数,你可以对它们进行猴子修补以返回预先计算的值。但这肯定不受框架支持,如果你这样做,你只能靠自己。
jfewjypa2#
在本地缓存它们怎么样?你可以有一个字典,键是值的元组。
沿着(未经测试)
字符串
您可以通过阅读一些JSON文件或pickle来初始化缓存字典。