for i in range(1,row):
for j in range(1,col):
if i > j and i != j:
x = Aglo[0][i][0]
y = Aglo[j][0][0]
Aglo[j][i] = offset.myfun(x,y)
Aglo[i][j] = Aglo[j][i]
Aglo [] []是一个2D数组,由第一行中的列表组成 offset.myfun()是在别处定义的函数
这可能是一个微不足道的问题,但我无法理解如何对这些嵌套循环使用多处理,因为x,y(在myfun()中使用)对于每个进程都是不同的(如果使用多处理)
谢谢
答案 0 :(得分:0)
如果我正确读取您的代码,则不会覆盖任何先前计算的值。如果这是真的,那么您可以使用多处理。如果没有,那么您无法保证多处理的结果的顺序正确。
要使用multiprocessing.Pool
之类的内容,您需要收集所有有效(x,y)对以传递给offset.myfun()
。这样的事情可能有用(未经测试):
pairs = [(i, j, Aglo[0][i][0], Aglo[j][0][0]) for i in range(1, row) for j in range(1, col) if i > j and i != j]
# offset.myfun now needs to take a tuple instead of x, y
# it additionally needs to emit i and j in addition to the return value
# e.g. (i, j, result)
p = Pool(4)
results = p.map(offset.myfun, pairs)
# fill in Aglo with the results
for pair in pairs:
i, j, value = pair
Aglo[i][j] = value
Aglo[j][i] = value
您需要将i和j传递给offset.myfun
,否则无法知道哪个结果在哪里。然后offset.myfun
应该返回i和j以及结果,这样你就可以适当地填写Aglo。希望这会有所帮助。