我的代理人口数为10,000,每个代理人的位置为[x,y],其中x和y是0到100之间的随机数。我想计算每个代理之间的距离,并确定它们是否是邻居然后将这些信息存储在10000x10000阵列中。到目前为止,我已经提出以下建议:
for j in range(len(agents_population[1])):
B[j,j:10000] = [
True if distance.euclidean(agents_population[1][j],
agents_population[1][i]) < r
else False for i in range(j,len(agents_population[1]))
]
其中 agents_population [1] 是代理人坐标列表(因此在这种情况下,10000项目的2项目列表列表:[[x1,y1],[x2,y2]。 ..), r 是半径, B 是该数组。在每次迭代中,我计算代理 j 和代理 j + 1 到9999之间的距离。但是,循环的每次迭代都是相互独立的,所以我想我可以使用我的处理器的所有四个核心而不是一个。我尝试使用multiprocessing
模块和Pool()。map()函数,但我无法使其工作。我真的很感激任何建议。
编辑:
我尝试使用multiprocessin
,如下所示:
def worker(j):
B[j,j:10000] = [
True if distance.euclidean(agents_population[1][j],
agents_population[1][i]) < r
else False for i in range(j,len(agents_population[1]))
]
def mp_handler():
p = Pool(4)
p.map(worker, range(0))
if __name__ == '__main__':
mp_handler()
B[0,].tofile('foo.csv',sep=',')
我通过cmd.exe运行它,但是当我打开文件foo.csv时,与运行j = 0的函数worker时的结果不同。我做错了吗?