2017-01-25 11 views
0
Scorelife_disct={'scorelife41': ['c', 'hindi', 'sql', 'scala', 'love'], 
'scorelife42': ['c', 'sql', 'english', 'Cat', 'html', 'cPlus', 'love'], 
'scorelife43': ['c', 'Cat', 'friend', 'love']} 

User_life_disct ={'scorelifeLife1': ['c', 'hindi', 'python', 'scala', 'graphics'], 
'scorelifeLife10': ['c', 'hindi', 'perl'], 
'scorelifeLife11': ['hindi', 'perl', 'spark']} 

import collections 
d = collections.defaultdict(dict) 

from __future__ import division 
for userid in Scorelife_disct: 
    #print userid 
    for life_disct in User_life_disct: 

     u1= Scorelife_disct[userid] 
     u2= User_life_disct[life_disct] 
     k1=len(set(u1)&set(u2))/len(set(u1)|set(u2)) 
     #print life_disct 
     #print k1 

     d[userid][life_disct] = k1 
     print d 
dict(d) 

出力:最適化Pythonのパンダコード

{' scorelife41': {' scorelifeLife1': 0.42857142857142855, 
    ' scorelifeLife10': 0.3333333333333333, 
    ' scorelifeLife11': 0.14285714285714285 }} 

私は辞書の各リストの間ジャカード類似性を持つ2つのPythonの辞書を使用していますが、私のプログラムは、データの膨大な量のためにあまりにも多くの時間を取っています。あまり時間をかけずに動作するように、時間の複雑さの問題をどのように減らすのですか(出力は正しいですが)。

+1

これはどのようにパンダを使用していますか? – James

答えて

0

コードがボトルネックになっている箇所を組み込みのプロファイラで確認することができます。How can you profile a python script?

この向こう
for userid in Scorelife_disct: 
    #print userid 
    for life_disct in User_life_disct: 

     u1= set(Scorelife_disct[userid]) 
     u2= set(User_life_disct[life_disct]) 
     # multiply by 1.0 so that the results aren't rounded to nearest int() 
     k1=len(u1&u2) * 1.0 /len(u1|u2) 
     #print life_disct 
     #print k1 

     d[userid][life_disct] = k1 
     print d 

、あなたが見てみたいことがあります。問題のスニペットを考える

は、私が見ることができる唯一の直接のスピードアップは、あなたがする必要以上のセットを()が実行されていることですデータを表現し、最も一般的な操作のために最適化するための異なるデータ構造。