gpt4 book ai didi

python - 函数内部多处理 scipy 优化的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:49 25 4
gpt4 key购买 nike

这是一个运行良好的简单代码。即使函数 minimize 包装了 scipy.optimize.minimize 它也不会提示酸洗

import numpy as np
from scipy import optimize
from multiprocessing import Pool

def square(x):
return np.sum(x**2+ 2*x)

def minimize(args):
f,x = args
res = optimize.minimize(f, x, method = 'L-BFGS-B')
return res.x

x = np.random.rand(8,10)

args = [(square,x[i]) for i in range(8)]
p = Pool(8)
p.map(minimize,args)

但是,如果尝试以下操作会失败并出现 pickling 错误

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

def run():
def square(x):
return np.sum(x**2+ 2*x)

def minimize(args):
f,x = args
res = optimize.minimize(f, x, method = 'L-BFGS-B')
return res.x

x = np.random.rand(8,10)

args = [(square,x[i]) for i in range(8)]
p = Pool(8)
p.map(minimize,args)

run()

我想制作一个模块来并行使用 scipy minimize 和许多初始猜测。但是,如示例所示,当我将其设为模块时,它失败了。

最佳答案

问题是 Python 不能 pickle 嵌套函数,在你的第二个例子中,你试图将嵌套的 minimizesquare 函数传递给你的子进程,这需要酸洗。

如果没有理由必须嵌套这两个函数,将它们移动到模块的顶层将解决问题。您还可以查看 this question用于 pickle 嵌套函数的技术。

关于python - 函数内部多处理 scipy 优化的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777299/

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