从嵌套的For循环生成2D列表

问题描述 投票:2回答:1

所以,我有一个类的python项目,我们正在模拟一维随机游走实验。因此,问题的第一部分包括我们创建一个程序,该程序将运行For循环1000次并将我们的初始值的“位置”提高/降低1.它还保存了位置和时间值以便绘制为好。

这个程序:

%matplotlib inline
import matplotlib.pyplot as plt

x = 0
n = 1000

pos = []
time = []
for i in range(0,1000):
    a = np.random.randint(low,high)

    if a == 0:
        x -= 1
    else:
        x += 1

    pos.append(x)
    time.append(i)

plt.plot(time, pos)

接下来的任务是采用这个程序并运行一个for循环,我们测量5个不同的“轨迹”(基本上,我们希望一次随机游走模拟产生5个不同的图)

问题的具体措辞如何:“非常好!虽然同时绘制一组这些内容会很棒。接下来,将循环代码放在一个额外的循环中,其中轨迹计数器(例如,trj)从0变为4 ,并将您的轨迹存储在2D列表中。然后,绘制下面的所有五个轨迹。“

这是我尝试解决方案:

trj = [[] for i in range(5)]


x = 0
n = 1000


for j in range(5):
    pos = []
    time = []
    trj[j] = [time, pos]

    for r in range(0,1000):
        a = np.random.randint(low,high)

        if a == 0:
            x -= 1
        else:
            x += 1

        pos.append(x)
        time.append(r)

plt.plot(trj[1])

我不断收到“超出范围”的错误。所有的帮助将不胜感激,因为我真的不明白概念上的2d列表(我理解它们包含行和列中的列表)

python python-3.x list 2d nested-loops
1个回答
0
投票

Matplotlib的plot函数有两个参数;在你的第一个例子中,你传递它timepos - 但是在第二个例子中,你传递一个列表([time, pos]),这只是一个参数,因此错误

你需要将这个列表扩展为2个参数 - 一种方法是使用*args将列表扩展为函数的许多参数:

plt.plot(*trj[1])

或者,如果您不喜欢*args格式,则更容易理解:

plt.plot(trj[1][0], trj[1][1])
© www.soinside.com 2019 - 2024. All rights reserved.