1

私は何千ものテーブルを持っており、それぞれに数百の単語と、それに対応するスコアが 2 列目に含まれています。そして、テーブルの各ペアの相関を計算する必要があります。

そこで、各テーブルを読み取り、それを辞書に変換し始めました。各単語は辞書のキーであり、そのスコアは値です。

今度は相関を計算します。すべての辞書が同じキーを持っているとは限りません。いくらか多め、少なめ。各ディクショナリはそのペアに従って展開する必要があります。つまり、ペアに他のキーに存在しないキーがある場合、他のディクショナリはそれらのキーによって更新され、それらのキーの値は 0 になり、最終的に相関係数を計算する必要があります。 .

例:

dict1 = {'car': 0.1, 'dog':0.3, 'tiger':0.5, 'lion': 0.1, 'fish':0.2}
dict2 = {'goat':0.3, 'fish':0.3, 'shark':0.4, 'dog':0.3}

したがって、dict1 は次のようになります。

dict1.comparable = {'car':0.1, 'goat':0.0 ,'dog':0.3, 'tiger':0.5, 'lion': 0.1, 'fish':'0.2, 'shark':0.0}
dict2.comparable = {'car': 0.0, 'goat':0.3, 'dog':0.3, 'fish':0.3, 'shark':0.4, ,'tiger':0, 'lion': 0}

そして、それらの値の相関を計算する必要があります。

辞書の値に基づいて辞書の類似性/相関を効率的に計算する方法に感謝します。

アップデート

これは、相関係数を技術的に計算する方法を説明する投稿です。

これが最も単純なバージョンです

import numpy
numpy.corrcoef(list1, list2)[0, 1]

ただし、「リスト」でのみ機能します。基本的に、私は効率的な方法で、キーに関する2つの辞書の相関係数を計算した後です。(キーの展開と並べ替えの量が少ない)

4

2 に答える 2

3
keys = list(dict1.viewkeys() | dict2.viewkeys())
import numpy
numpy.corrcoef(
    [dict1.get(x, 0) for x in keys],
    [dict2.get(x, 0) for x in keys])[0, 1]

まず、すべてのキーを取得します。並べ替える必要はありませんが、重複排除が必要です。リストとして保存すると、後で同じ順序で反復するのに役立ちます。

次に、numpy が必要とする 2 つのリストを作成できます。

于 2013-05-23T00:30:04.337 に答える