因此,我有一个用于类的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列表(我有点理解它们包含行和列中的列表)
答案 0 :(得分:0)
Matplotlib的plot
函数带有2个参数;在第一个示例中,您传递了time
和pos
-但是,在第二个示例中,您传递了一个列表([time, pos]
),该列表只是一个参数,因此会出现错误>
您需要将此列表扩展为2个参数-一种方法是使用*args
将列表扩展为该函数的多个参数:
plt.plot(*trj[1])
或者,如果您不喜欢*args
格式,则可以使用以下更容易遵循的选项:
plt.plot(trj[1][0], trj[1][1])