Ich habe die Wahrscheinlichkeit Dichte Funktionen func1
und func2
(einschließlich der support
von jedem) von zwei Zufallsvariablen. Jetzt muss ich die Wahrscheinlichkeitsdichte in Abhängigkeit von der Summe dieser beiden Zufallsvariablen, die ich über erstellen:Cache dynamisch generierte Funktionen
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))
Das Problem mit diesem ist die große Redundanz. Viele Werte müssen mehr als einmal berechnet werden. Also habe ich versucht zu cachen, aber Probleme traten aufgrund der dynamisch generierten Funktionen ohne eindeutige Namen auf.
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>' [...]
Was ist ein besserer Ansatz so dynamisch generierte Funktionen cachen?
Ja, im Speicher ist kein Problem und 'lru_cache' gut funktioniert. Vielen Dank! – Chickenmarkus