1

では、始めましょう。ユーザーを持つタプルのリストがあり、2 番目の項目として書籍の評価のリストがあります。例えば:

[('Ben', [5, 0, 0, 0, 0, 0, 0, 1, 0, 1, -3, 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, -5, 0, 0, 5, 5, 0, 5, 5, 5, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, -5]),
('Moose', [5, 5, 0, 0, 0, 0, 3, 0, 0, 1, 0, 5, 3, 0, 5, 0, 3, 3, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 3, 0, 0])]

それは、リストの最初の 2 つのことだけです。では、合計 86 人のユーザーとその評価がリストに表示されます。Ben のすべての評価に Mooses のすべての評価を掛けて、それらをすべて足し合わせる方法を見つけ出す必要があります。たとえば、Ben の最初の評価は 5 で、Moose の最初の評価は 5 であるため、5x5 を実行し、それを類似性スコアのリストに追加します。私の問題は、評価リストのすべての要素に入力されたユーザーの評価リストを掛ける方法がわからないことです。したがって、基本的には、ユーザー名の入力を求めてから、他のすべてのユーザーの評価に選択したユーザーを掛けて、最高の類似性スコアを出力する必要があります。私はわだち掘れで立ち往生しているので、どんな助けでも大歓迎です、前もって感謝します。

4

1 に答える 1

4

NumPy を使用することもできますが、純粋な Python ソリューションも簡単です。

d = dict(my_list)
sum(map(operator.mul, d["Ben"], d["Moose"]))

最初の行は問題とは関係ありません。タプルのリストをより適切な辞書に変換するだけです。

類似点の完全なマトリックスを取得するには、次を使用できます

{name1: {name2: sum(map(operator.mul, d[name1], d[name2])) for name2 in d}
         for name1 in d}

(後者のコード スニペットは、Python 2.7 または 3.x でのみ機能します。)

于 2012-04-12T14:37:57.827 に答える