一个简单的方法可以是将数组分成几个部分,并创建一些线程来贯穿这些部分。例如一段从(0,0,0)到(5,10,15),另一段从(5,10,16)到(10,20,30)。
您可以使用threading模块并执行如下操作import numpy as np
import threading as t
def fun(x, y, z):
# time-consuming computation...
# ...
return output
dim1 = 10
dim2 = 20
dim3 = 30
result = np.zeros([dim1, dim2, dim3])
#b - beginning index, e - end index
def work(ib,jb,kb,ie,je,ke):
for i in xrange(ib,ie):
for j in xrange(jb,je):
for k in xrange(kb,ke):
result[i, j, k] = fun(i, j, k)
threads = list()
threads.append(t.Thread(target=work, args(0,0,0,dim1/2,dim2/2,dim3/2))
threads.append(t.Thread(target=work, args(dim1/2,dim2/2,dim3/2 +1,dim1, dim2, dim3))
for thread in threads:
thread.start()
可以通过某种算法定义这些部分,并动态确定线程数。希望它能帮助你或者至少给你一些建议。