如何在Python中绘制对象路径的痕迹?

时间:2019-02-03 23:59:43

标签: python numpy matplotlib

问题#1a。 [5分]假设一只蚂蚁每秒通过一步(x,y)随机游荡,其中,在每个蚂蚁步骤中,x和y均来自正态分布,其均值为0,标准差为1.0mm(对下面的所有问题都假设这)。在一个小时的时间内绘制蚂蚁的路径轨迹。

mean = 0
sd = 1.0
side = np.random.normal()
step = np.random.normal()

for side, step in np.random.normal(1,3600): #3600 seconds in one hour
    side += 1
    step += 1
    x.append(side) #one step in x direction
    y.append(step) #one step in y direction

plt.plot(x,y,color = "darkpink")

1 个答案:

答案 0 :(得分:0)

您发布的代码存在严重问题

  • 实际上,您不是在创建形状数组(1,3600),而是在创建单个浮点数,这会导致for循环中出现错误。如果查看np.random.normal的{​​{3}},您会发现前两个位置参数是 mean 标准偏差的。第三个参数实际上是形状,您可以将其作为关键字参数进行访问。
  • 即使您获得(1,3600)数组,在for循环中,您也会在2个变量上扩展(1,3600)数组,这是不可能的,因为扩展是沿第一个轴进行的
  • 我不确定您为什么要对 step 求和,因为如果您获得正确的值norm(0,1),您肯定会转移从0到1 norm(1,1)的平均值。
  • 附录将元素插入列表中,但是您丝毫没有考虑到step(n)之后的路径应该是step(n-1)加上step(n)的路径之和。

代码:

import numpy as np
import matplotlib.pyplot as plt

path = steps = np.random.normal(size=(3600,2))

# pos(n) = pos(n-1) + step(n)
for n in range(path.shape[0]-1):
    path[n+1] += path[n]

# Compact way to plot x and y: (3600,2) -> (2,3600) and the * expand along the first axis
plt.plot(*path.T)
plt.show()

documentation

enter image description here