我有两个随机变量的概率密度函数func1
和func2
(包括support
每个)。现在我需要这两个随机变量之和的概率密度函数,我通过以下方式创建:
import numpy as np
import scipy.integrate
[...]
def density_add(func1, func2, support):
return np.vectorize(lambda xi: scipy.integrate.simps(func1(support) * func2(xi-support), support))
问题在于巨大的冗余。许多值必须计算不止一次。所以我尝试缓存,但由于动态生成的函数没有唯一名称,出现了问题。
from joblib import Memory
mem = Memory(cachedir="/tmp/joblib", verbose=0)
[...]
def density_add(func1, func2, support):
return np.vectorize(mem.cache(lambda xi: scipy.integrate.simps(func1(support) * func2(xi-support), support))
/usr/lib/python3/dist-packages/numpy/lib/function_base.py:2232: JobLibCollisionWarning: Cannot detect name collisions for function '<lambda> [...]
/usr/lib/python3/dist-packages/numpy/lib/function_base.py:2232: JobLibCollisionWarning: Possible name collisions between functions '<lambda>' [...]
缓存此类动态生成的函数的更好方法是什么?