所以,我有一个类的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列表(我理解它们包含行和列中的列表)
Matplotlib的plot
函数有两个参数;在你的第一个例子中,你传递它time
和pos
- 但是在第二个例子中,你传递一个列表([time, pos]
),这只是一个参数,因此错误
你需要将这个列表扩展为2个参数 - 一种方法是使用*args
将列表扩展为函数的许多参数:
plt.plot(*trj[1])
或者,如果您不喜欢*args
格式,则更容易理解:
plt.plot(trj[1][0], trj[1][1])