【问题标题】:How to plot results of repeated loop separately?如何分别绘制重复循环的结果?
【发布时间】:2018-12-18 12:07:07
【问题描述】:

我有一个一维随机游走的代码,我需要运行 20 次并将结果绘制在一张图中。该代码适用于 1 次步行,但我无法弄清楚如何进行多次步行。

我尝试了一个 while 循环和一个 for 循环,由于某种原因,它遍历循环并 添加结果,而不是回到开头并重新开始。因此,如果我有 100 步并且想要步行 20 次,它会绘制 20*100=2000 步的步行,而不是 100 步的 20 次步行。
这是我的代码:

import random
import matplotlib.pyplot as plt
import numpy as np

p=0.5
q=1-p
prob=[p,q]

N=100 #number of steps
n=20 #number of walks

start = 0  
positions = [start]
no_of_walks=list(range(0,n+1)) #since its a half open half closed interval

for n in no_of_walks:
    for i in range(0, N): 
        rr = random.random()
        right = rr < prob[0] and positions[-1] > -N
        left = rr > prob[1] and positions[-1] < N #length to be walked over 
        positions.append(positions[-1] - right + left)
        plt.plot(positions)

plt.show()

【问题讨论】:

  • 您是否考虑过在每次步行前重置positions
  • 啊,这是一个很好的提示!我现在通过简单地将它移动到第一个 for 循环中来尝试它。

标签: python for-loop matplotlib plot


【解决方案1】:

positions 需要在每次行走之前重置,方法是将其移动到外循环中。

此外,我假设每次步行应该只绘制一次,所以对plt.plot(...) 的调用也应该进入外循环(在步行之后)。

import random
import matplotlib.pyplot as plt
import numpy as np

p=0.5
q=1-p
prob=[p,q]

N=100
n=20

start = 0  
#positions = [start]             # <- move this
no_of_walks=list(range(0,n+1))   #     |
                                 #     |
for n in no_of_walks:            #     v
    positions = [start]          # <- here
    for i in range(0, N): 
        rr = random.random()
        right = rr < prob[0] and positions[-1] > -N
        left = rr > prob[1] and positions[-1] < N
        positions.append(positions[-1] - right + left)
    plt.plot(positions)          # <- and move this out of the walk

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多