2016-04-05 18 views
-4

私は、1組のテキストファイルと84個のテキストファイルのデータセットのコサイン類似度を計算する目的でループを実行しています(反復プロセスとして)。私が従うロジックは、最初に文書0と1からそれを計算し、次に文書1と2を文書n-1とnまで計算することです。私はそれをコード化された方法は以下の通りです:list index out of rangeリストインデックスが範囲外ループPython

my_funcs = {} 
for i in range(len(data)): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

は驚くほど私のコードは私に次のエラーを与えるわけではありません。 i = len(data)のときにループを停止するよう指示する方法はありますか?

+1

あなたはループを停止するよう指示しましたが、 'data [i + 1]'はフォールトしているものです。おそらく 'range(len(data) - 1)'が必要です。 – msw

+3

大きな理由なしに 'globals()'を使わないでください。なぜあなたの理由が素晴らしいのか説明できない限り、大きな理由がないとします。 – msw

答えて

1
my_funcs = {} 
for i in range(len(data)-1): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

私はちょうどループをlen(data)-1にしました。あなたはそれがどのような変化を起こすのか気づきますか

ところで、私は多くの機能でglobals()を記入することに同意しません。それらの84があります。 Pythonシェルの使用(高速作業のため)のためにそれらを使用していない限り、私はあなたにこれを試すことを提案しません。

関連する問題