python-3.x - python-3 并行化我的函数问题
问题描述
我正在使用 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)
解决方案
和:
population_in = np.random.choice ( np.linspace ( lower_bound , upper_bound , Base_Value ** MinResolution ) , size = ( Popula_size , dimension ) , replace = True )
你制作一个二维数组(Popula_size, dimension)
形状。这被传递为DiscPopulation
.
resolution = np.random.randint(1, 8, size = (1, dimension))
双迭代函数可以替换为对整个数组进行操作而没有缓慢迭代的函数:
def Discretiz(lower_bound, upper_bound, DiscPopulation, resolution):
pop_size = DiscPopulation[0] # no need for the 'int'
num = DiscPopulation - lower_bound
divisor = (upper_bound-lower_bound)/(Base_value**resolution-1)
decimal = num/divisor
# this divide does (pop,dimension)/(1,dimension); ok by broadcasting)
decimal = np.round(decimal) # no need for int
the_new_population = lower_bound + decimal * divisor
return the_new_population
我在这里就地写了这个。它在语法上是正确的,但我没有尝试运行它。
推荐阅读
- angular - http post请求中的选项重载错误
- javascript - 在 testcafé 测试中实现一个函数,该函数在浏览器的 url 更改时运行
- tmux - 以特定布局启动 tmux
- php - 如何使用 SQL 语句 PHP Laravel 创建过滤?
- javascript - 获取 3rd 的文本内容
里面的元素
. 有几个同名的 div 容器 - azure - 如何在 azure 上创建具有 Internet 访问权限的私有 VM
- python - 在将包上传到 pypicloud 之前更新 setup.py 中的版本
- css - 引导网格不响应 Web 的问题
- java - JavaFX 响应式表格视图
- css - 嵌套计算的 SASS 问题