【发布时间】:2020-10-03 15:30:40
【问题描述】:
我正在使用 python-3.x,我想通过使用多处理并行化我的函数来加速我的代码,我应用了多处理但由于某种原因,它可能不起作用,我不确定在哪里有问题吗?
所以下面是我所做的一个小例子。 任何建议表示赞赏
import numpy as np
import math
import multiprocessing as mp
lower_bound = -500
upper_bound =500
dimension =1000
Base_Value = 10
Popula_size = 3000
MinResolution = 8
population_in = np.random.choice ( np.linspace ( lower_bound , upper_bound , Base_Value ** MinResolution ) , size = ( Popula_size , dimension ) , replace = True )
resolution = np.random.randint(1, 8, size = (1, dimension))
def Discretiz(lower_bound, upper_bound, DiscPopulation, resolution):
pop_size = int(len(DiscPopulation))
the_new_population = np.zeros ((pop_size, dimension))
for i in range (pop_size) :
for ii in range (dimension):
decimal = int(np.round((DiscPopulation[i][ii] - lower_bound) / ((upper_bound-lower_bound)/(math.pow(Base_Value,resolution[:,ii])-1))))
the_new_population[i, ii] = (lower_bound + decimal * ((upper_bound-lower_bound)/(math.pow(Base_Value,resolution[:,ii])-1)))
return the_new_population
# without_parallelizing
# the_new_population = Discretiz(lower_bound, upper_bound, population_in, resolution)
# wit_parallelizing
pool = mp.Pool(mp.cpu_count())
the_new_population = [pool.apply(Discretiz, args=(lower_bound, upper_bound, population_in, resolution))]
print (the_new_population)
【问题讨论】:
-
当
numpy可以在整个数组上做同样的事情时,你为什么还要使用math函数。math.power需要标量输入,迫使您使用慢速双for循环。在加入多处理潮流之前,您应该最大限度地利用numpy。 -
@hpaulj 感谢您的帮助,但我如何将 numpy 的力量应用到我的工作中,例如数学力量
math.pow(Base_Value,resolution[:,ii])-1) -
您能否也添加什么不起作用以及您是如何确定的?
-
@atru 你能看看我的回答吗
-
我仔细查看了您的代码:您需要自己指定要并行化什么以及如何并行化。它可能像并行
map和共享数组一样简单,但我需要刷新更多细节。
标签: python-3.x numpy parallel-processing python-multiprocessing