说我有一个函数,可以为同一输入提供不同的结果,并且需要对同一输入执行多次才能获得均值(我将举一个简单的例子,但实际上随机性的来源是{{1 }}来自train_test_split
,如果重要的话
sklearn.model_selection
此函数的参数是在另一个函数中定义的,就像这样(同样是一个简单的示例,请不要介意它们是否无效/ pythonistic):
define f(a,b):
output=[]
for i in range(0,b):
output[i] = np.mean(np.random.rand(a,))
return np.mean(output)
我不想使用define g(c,d):
a = c
b = c*d
result=f(a,b)
return(result)
循环,而是想使用for
来加快执行时间。我发现multiprocessing
和pool.apply
都不起作用(执行时间增加),只有pool.startmap
有效。但是,只能接受一个参数(在这种情况下为迭代次数)。我尝试如下重新定义pool.map
:
f
然后按如下所示使用define f(number_of_iterations):
output=np.mean(np.random.rand(a,))
return output
:
pool.map
基本上,这是一个使import multiprocessing as mp
define g(c,d):
temp=[]
a = c
b = c*d
pool = mp.Pool(mp.cpu_count())
temp = pool.map(f, [number_of_iterations for number_of_iterations in b])
pool.close()
result=np.mean(temp)
return(result)
成为单参数函数的复杂解决方案。希望f
仍会接受参数f
,但是执行a
会导致出现有关未定义g
的错误。
有什么方法可以使pool.map在这种情况下工作?
答案 0 :(得分:0)
我认为functool.partial
解决了您的问题。这是一个实现:https://stackoverflow.com/a/25553970/9177173这里是文档:https://docs.python.org/3.7/library/functools.html#functools.partial