说我有一个功能,可以为同一输入提供不同的结果,并且需要多次执行同一输入以获得平均值(我会绘制一个琐碎的示例,但实际上是随机性的来源是train_test_split
的CC_1,如果这很重要(
define f(a,b):
output=[]
for i in range(0,b):
output[i] = np.mean(np.random.rand(a,))
return np.mean(output)
此功能的论点是在其他函数中定义的(同样,一个琐碎的示例,请不要介意这些函数是否不是有效/pythonistic(:
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
导致关于未定义a
的错误。
有什么方法可以使池。在这种情况下映射工作?
我认为functool.partial
解决了您的问题。这是一个实现:https://stackoverflow.com/a/255553970/9177173在这里文档:https://docs.python.org/3.7/library/library/functool/functools.html#functools.html#functools.partunclunctools.partialfunctial