2016-05-01 18 views
0

私はPythonを学び始めています。私はこのコードについて、私の友人と私がランダムに作成した質問があります。最も高いYポイントを5000回実行して平均をとる正しい方法は何でしょうか。Python平均最大Y(n実行)

#!/usr/local/bin/python 

import random 
import matplotlib.pyplot as plt 

n = 5000 
p_win = 0.50 
stakecounter = 0 
wealth = 3.3 
lwealth = [3.3] 
bet = .1 


while wealth > 0 : 
    flip = random.random() <= p_win 
    win = 3 if flip else -3 
    wealth = wealth + win * bet 
    lwealth.append(wealth) 
    stakecounter += 1 

print(len(lwealth)) 
plt.plot(lwealth) 
plt.show() 

答えて

1

ランで最大値を取得するには、2つの簡単な方法があります。

  • は、最大値を保持する変数を持っています。たとえば、maxwealth=0で開始し、whileループでif wealth > maxwealth: maxwealth = wealthを入力して、富が増えるたびにmaxwealthを更新します。これは便利な方法ですが、値のリストを格納していない場合は、あなたの場合はそうです。
  • リストの最後にmaxの組み込み関数を使用してください:max(lwealth)はリストに最大値を与えます。

ここで、平均実行回数が5000回を超える方法について教えてください。最も簡単な方法は、コードを5000回ループし、最大値のリストを格納してから、sum(maxes)/len(maxes)を実行することです。または、Mark Colanの答えを使用して、値をmaxtotal += maxwealthのように累積し、次にnで除算します。例えば

:numpyのを使用して、しかし、あなたのコードでは良い考えかもしれないと

import itertools 
import random 
n = 5000 
maxtotal = 0 
for _ in itertools.repeat(None, n): 
    p_win = 0.50 
    stakecounter = 0 
    wealth = 3.3 
    lwealth = [3.3] 
    bet = .1 

    while wealth > 0 : 
     flip = random.random() <= p_win 
     win = 3 if flip else -3 
     wealth = wealth + win * bet 
     lwealth.append(wealth) 
     stakecounter += 1 

    maxtotal += max(lwealth) 

print maxtotal/n 

注意。 5000回ループしたコードは非常に長い時間がかかります。

totalwealth += wealth 

:前の回答が示唆したように

+0

非常に長い時間で、何時間ですか?日?年?千年?私は待つことができます、これは面白いです。 – stanleysteam

+0

これを試してみてください。 – cge

0

は、1行のコードは

if wealth > maxwealth: maxwealth = wealth 

maxwealth whileループ内で次の行を追加することであろう平均を取るための簡単かつ迅速な方法を追跡します...そしてwhileループの直後:

avgwealth /= n 

つまり、代わりに富は平均を後にして、単に富の点の合計を計算し、次に富の数で割って平均を求めます。

+0

しかし、彼らは彼らが望む平均ではないようです。代わりに、同じコードを5000回実行し、各実行の最大値を平均したいと考えているようです。私はあまりよく分からない。 – cge

+0

私は、5000回の実行で最大Yを記録して平均化したいと考えています。これは、その公式+ 3-3を使って平均最大財を見る方法です。 – stanleysteam

+0

以下で説明するソリューションとは異なる何かを探しているなら、あなたが望むものがどのように異なっているか説明するのに役立ちます。 –

関連する問題