2017-11-04 7 views
0

私はすべてのドキュメントの間の距離を距離の行列に格納しようとしています。ラベルを使って距離値を距離行列に格納する方法は?

これは私のコードです:

dists = [] #a matrix of distances 
    i=0 
    for row in self.matrix: 
     current_row = row 
     document_distances = [] 
     # build list with possibilities for every document in labels 
     for label in self.labels: 
      document_distances.append((1 - self.row_distance(current_row, label), label)) 

     dists[i] = document_distances #[(0.22529600444665132, 'Doc1'), (0.22952074233187614, 'Doc2'), (0.289625872768411, 'Doc3'), ...] 
     i += 1 
    print(dists) 

しかし、コードを実行した後、私は次のエラーを取得する:

IndexError: list assignment index out of range

誰もが私のコードは、なるように、私は変更すべきかを教えてくださいすることができ作業?代わりにこれを行うの

答えて

1

:あなたのコードはいくつかの非常に奇妙な文があり

dists.append(document_distances) 
1

:あなたはrowを反復し、その後current_rowなどに割り当て

dists[i] = document_distances 

は、これを行いますさらに、いくつかのカウンターを追跡します。これらはすべて必要ではありません。

最良の方法は、おそらくリストの内包を使用している:

dists = [(1 - self.row_distance(row, label), label) 
      for row in self.matrix 
      for label in self.labels] 

これはすべてのコードを置き換えます。あなたが本当に手続きのコードをしたい場合は

または、append使用することができます。

dists = [] #a matrix of distances 

for row in self.matrix: 
    document_distances = [] 
    for label in self.labels: 
     document_distances.append((1 - self.row_distance(current_row, label), label)) 

    dists.append(document_distances) 
print(dists)