2016-10-20 21 views
0

この関数にはネストされたループが含まれています。私はコードのより速い実行のために並列化する必要があります。Pythonでネストされたforループを並列化する方法

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を行うにはいくつかの方法は、ベクトルが含まれているリストのリストを含む配列ですあります。

+0

X、BOW_X、C、および期待される出力の小さな例を挙げることができますか? –

+0

X = array([[[1,2,3]、[2,7,6]、[3,0,1]]、[[3,3,3]、[1,1,1]]、 [1,2,3] [1,2,3] [1,2,3] [1,2,3] [1,2,3] [[6,7,5]、[9,0,1]、[3,7,5]、[0,4,4]]、dtype = object) [1,2,3] - >単語のベクトルrep [1,2,3]、[2,7,6]、[3,0,1]] - > 3ワードを含む文書 この配列には、 2、4ワードresp BOW_X = array([[[0.1,0.02,0.3]、[0.2,0.7,0.6]、[0.03,0,0.1]]、[[0.03,0.3,0.03]、[0.1、 [0,0.4,0.04]]、dtype = object) 出力:I(0,0,0,0,0) 1つの文書内の各単語の最小距離を他の文書の各単語から計算したい場合は、minを格納します。それを追加してdist b/w 2 docsを入手してください – fawkes94

+0

説明が必要な場合は元に戻す – fawkes94

答えて

0

範囲の代わりにxrangeを試してみましたか?より高速な実行に役立ちます。 (これはコメントに書かれていますが、私はまだロックしていません。申し訳ありません)

+0

私は巨大なデータセットを持っているので、あまり役に立ちません。私はjoblibライブラリを使ってそれを並列化する方法が必要です – fawkes94

0

GPUがあり、命令間のデータ依存関係がない場合、PyCudaを使用することができます。 PyCudaを使用すると、複数の並列スレッドを起動できますが、デバイス(CPUとGPU)間のデータ転送には若干のオーバーヘッドがあります。

関連する問題