0

我有这个包含嵌套循环的函数。我需要并行化以更快地执行代码。

def euclid_distance(X,BOW_X):
     d3=[]
     d2=[]

     for l in range(len(X)):
         for n in range(l+1,len(X)):
             d1=[]
             for m in range(len(X[l])):
                 min1=999
                 p=0
                 while(p<len(X[n])):
                     d=scipy.spatial.distance.euclidean(X[l][m],X[n][p])
                     d=d*numpy.min([BOW_X[l][m],BOW_X[n][p]])
                     if(d<min1):
                         min1=d
                     if(min1==0):
                         break
                     p+=1
                 d1.append(min1)

             d2.append(d1)

     for i in range(len(d2)):
         d3.append(sum(d2[i]))


return (d3)

有没有办法做到这一点 X 是一个包含列表列表的数组,其中包含向量。

4

2 回答 2

0

你试过用 xrange 代替 range 吗?它可能有助于更快地执行。(这应该在评论中,但我还没有解锁,对不起)

于 2016-10-20T09:56:08.870 回答
0

如果你有 GPU 并且指令之间没有数据依赖关系,你可以使用 PyCuda。使用 PyCuda,您可以生成多个并行线程,但设备之间的数据传输会产生一些开销,即 CPU 和 GPU。

于 2016-10-21T06:05:08.127 回答