2

私は 1 次元のランダム ウォークを作成しています。時間の経過とともに、これまでに到達した原点からの最大距離を for ループで保存したいと考えています。5 つのランダム ウォークが生成されます。これは私のコードです:

for j in range(5):
    r = rand(10000)
    t = range(10000)
    x = zeros(10000)
    y = zeros((10000, 5))
    for i in range(10000):
        walk = r[i]
        if walk < 0.5:
            x[i] = x[i-1] - 1
            y[:,j]= maximum.accumulate(abs(x))
        else:
            x[i] = x[i-1] + 1
            y[:,j]= maximum.accumulate(abs(x))
    plot(t,x, label="Walk %d" %(j+1))

title("1-D Random Walk (Position versus Time)")
xlabel("Time")
ylabel("Position")
legend(loc="best")
grid()

問題は、for ループが設定された範囲 (5) を反復した後、出力の 2 次元配列に最後の反復のみが含まれることです。どういうわけか、前のものを上書きするので、最後の行だけが埋められた 10000x5 の配列しか得られません。

どうすればこれを機能させることができますか?

4

1 に答える 1

4

あなたは、何らかの理由で、実行することを選択しました

y = zeros((10000, 5))

外側のループを通るたびに、何度も何度も。

明らかな結果として、最後の代入だけyが「取る」ことができ、明らかに同じ名前への以前の代入を上書きします。このように繰り返される割り当てから、他にどのような動作を期待できるでしょうか?!

この割り当てを外側のループの外に移動すると、 name の「オーバーライド」がなくなりますy

于 2015-03-28T20:12:57.163 に答える