4

以下にリストされている3つのアレイがあります。

  1. users— 50000 人のユーザーの ID が含まれています (すべて個別)
  2. pusers— いくつかの投稿を所有しているユーザーの ID が含まれています (繰り返しの ID も含まれています。つまり、1 人のユーザーが多くの投稿を所有できます) [ 50000 の値]
  3. score— pusers の各値に対応するスコアが含まれています。[ 50000 個の値]

PScoreここで、次の計算に基づいて別の配列を設定したいと思います。usersinの各値についてpusers、対応する をフェッチし、それをに対応するインデックスの配列にscore追加する必要があります。PScoreuser

例、

if users[5] = 23224
and pusers[6] = pusers[97] = 23224 
then PScore[5] += score[6]+score[97]

注意事項:

  • scoreに関連しているpusers(例: をpusers[5]持っているscore[5])
  • PScoreに関連すると予想されるusers(例: の累積スコアusers[5]Pscore[5])
  • 最終的な目的は、投稿の累積スコアを、それを所有するユーザーに割り当てることです。
  • 投稿を所有していないユーザーにscoreは 0 が割り当てられます。

誰でもこれを行うのを手伝ってもらえますか? 私は多くのことを試しましたが、別の試行を実行すると、終了するまで出力画面が空白のままにCtrl+Zなります。

次のすべての投稿を確認しましたが、シナリオに効果的に使用できませんでした。

私はこのフォーラムに不慣れで、Python の初心者でもあります。どんな助けも私にとって本当に役に立ちます。

追加情報

  • StackOverflow データを使用して小さなプロジェクトに取り組んでいます。
  • 私は Orange ツールを使用しており、ツールと Python を学習中です。

わかりました、私のアプローチに何か問題があることを理解しています。では、このシナリオではリストを使用すべきではありませんか? 誰かが私にこれをどのように進めるべきか教えてもらえますか?

私がたどり着いたデータのサンプルは以下のとおりです。

PUsers  Score
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
-1  0
13  0
77  1
77  4
77  3
77  0
77  2
77  2
77  3
102     2
105     0
108     2
108     2
117     2

Users
-1
1
2
3
4
5
8
9
10
11
13
16
17
19
20
22
23
24
25
26
27
29
30
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
48
49
50

私が欲しいのは、各ユーザーに関連付けられた合計スコアだけです。繰り返しになりますが、pusers リストには繰り返しが含まれていますが、users リストには一意の値が含まれています。PScore[6]に関連付けられた合計スコアを参照するように、各ユーザーに関連付けられた合計スコアを保存する必要がありUser[6]ます。

質問に答えていただければ幸いです。

前もって感謝します。

4

2 に答える 2

2

配列をどのように記述したか、および python を使用しているため、これは辞書の完璧な候補のように見えます。

投稿所有者用の配列と投稿スコア用の別の配列を持つ代わりに、ユーザー ID をスコアにマップする辞書を作成できるはずです。データを取り込むときは、辞書を調べて、ユーザーが既に存在するかどうかを確認します。その場合、スコアを現在のスコアに追加します。そうでない場合は、新しいエントリを作成します。すべてのデータをループしたら、ユーザー ID から合計スコアにマップする辞書が必要です。

http://docs.python.org/2/tutorial/datastructures.html#dictionaries

于 2013-11-04T16:59:50.787 に答える
1

あなたのアルゴリズムは間違っているか壊れていると思います。その複雑さを計算してみてください。それN^2以上の場合は、非効率的なアルゴリズムを使用している可能性があります。O(N^2)50.000 要素の場合、数秒かかります。O(N^3)おそらく数分かかります。アプローチに確信がある場合は、いくつかの小さな偽のデータで実行してみて、正しいことを行うかどうか、または誤って無限ループを追加したかどうかを確認してください。

辞書を使用して線形時間で簡単に動作させることができます。

于 2013-11-04T17:06:50.717 に答える