gpt4 book ai didi

python - 优化函数评估缓存部分结果

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:36 24 4
gpt4 key购买 nike

假设我有一个具有许多输入参数的复杂数学函数 P = [p1, ..., pn]。假设我可以将函数分解成 block ,例如:

f(P) = f1(p1, p2) * f2(p2, ... pn)

也许

f2(p2, ..., pn) = p2 * f3(p4) + f4(p5, ..., pn)

假设我必须为 P 的许多值计算 f,例如我想找到 f 的最小值。假设我已经计算了 f(P) 并且我需要计算 f(P') 其中 P' 等于 P 除了 p1。在这种情况下,我不必重新计算 f2、f3、f4,而只需重新计算 f1

是否有一个库可以帮助我实现这种缓存系统?我知道RooFit ,但它是面向统计模型的,由 block 组成。我正在寻找更一般的东西。 scipy/scikits 和类似的是首选,但 C++ 库也可以。这个技术有名字吗?

最佳答案

如果你可以将这些函数写成纯函数(这意味着它们总是为相同的参数返回相同的值,并且没有副作用),你可以使用内存,这是一种保存函数调用结果的方法.

try:
from functools import lru_cache # Python 3.2+
except ImportError: # Python 2
# Python 2 and Python 3.0-3.1
# Requires the third-party functools32 package
from functools32 import lru_cache

@lru_cache(maxsize=None)
def f(arg):
# expensive operations
return result

x = f('arg that will take 10 seconds') # takes 10 seconds
y = f('arg that will take 10 seconds') # virtually instant

为了说明,或者如果您不想在 Python < 3.2 上使用 functools32:

def memoize(func):
memo = {}

def wrapper(*args):
if args not in memo:
memo[args] = func(*args)
return memo[args]

return helper

@memoize
def f(arg):
# expensive operations
return result

x = f('arg that will take 10 seconds') # takes 10 seconds
y = f('arg that will take 10 seconds') # virtually instant

关于python - 优化函数评估缓存部分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com