3

GallupやRasmussenなどの実際のポーリングデータ会社が毎日公開しているものをシミュレートするプログラムを作成しています:www.gallup.comおよびwww.rassmussenreports.com

私はブルートフォース方式を使用しています。この方法では、コンピューターがランダムな1日のポーリングデータを生成し、3日間の平均を計算して、ランダムデータの平均が世論調査員の数と一致するかどうかを確認します。(ほとんどの企業の投票数は3日間の平均です)

現在、1回の反復でうまく機能しますが、私の目標は、平均的なポーリングデータと一致する最も一般的なシミュレーションを生成することです。次に、1回から1000回の反復のコードを変更できます。

そして、これが私の問題です。テストの最後に、次のような単一の変数に配列があります。

[40.1, 39.4, 56.7, 60.0, 20.0 ..... 19.0]

プログラムは現在、正しいシミュレーションごとに1つの配列を生成します。各配列を単一の変数に格納できますが、要求した反復回数に応じて1〜1000個の変数を生成できるプログラムが必要です!?

これを回避するにはどうすればよいですか?必要なシミュレーションの数に応じて、プログラムが配列を格納するための変数を生成する必要がない、これを行うインテリジェントな方法があることを私は知っています。

マケインのコードテスト:

 test = [] 

while x < 5: 

   test = round(100*random.random())

   mctest.append(test) 

   x = x +1 


mctestavg = (mctest[0] + mctest[1] + mctest[2])/3 

#mcavg is real data

if mctestavg == mcavg[2]: 
  mcwork = mctest 

複数のmcwork変数を作成せずに繰り返すにはどうすればよいですか?

4

6 に答える 6

3

あなたはこれをすることについて話しているのですか?

>>> a = [ ['a', 'b'], ['c', 'd'] ]
>>> a[1]
['c', 'd']
>>> a[1][1]
'd'
于 2008-09-12T18:14:01.360 に答える
3

このようなものは機能しますか?

from random import randint    

mcworks = []

for n in xrange(NUM_ITERATIONS):
    mctest = [randint(0, 100) for i in xrange(5)]
    if sum(mctest[:3])/3 == mcavg[2]:
        mcworks.append(mctest) # mcavg is real data

最後に、有効なmctestリストのリストが残ります。

私が変更したこと:

  • forループの代わりにリスト内包表記を使用してデータを構築しました
  • random.randintランダムな整数を取得するために使用されます
  • スライスを使用sumし、最初の 3 つの項目の平均を計算する
  • (実際の質問に答えるには:-))mcworks反復ごとに新しい変数を作成する代わりに、結果をリストに入れます
于 2008-09-12T19:08:38.827 に答える
1

Pythonのリストには、任意のタイプのオブジェクトを含めることができます-質問を正しく理解している場合、のlistlist仕事をしますか?generate_poll_data()このようなもの(データを作成する関数があると仮定します:

data = []

for in xrange(num_iterations):
    data.append(generate_poll_data())

次に、 3回目の実行data[n]からのデータのリストになり(n-1)ます。

于 2008-09-12T18:14:04.060 に答える
1

これを行うためにNumPyを使用することを強く検討します。迅速かつ簡単に処理できる効率的な N 次元配列が得られます。

于 2008-09-12T19:01:00.873 に答える
1

あなたは変数で考えているので、リストのリストよりも辞書を好むかもしれません:

data = {}
data['a'] = [generate_poll_data()]
data['b'] = [generate_poll_data()]

于 2008-09-12T18:31:04.860 に答える