![数据科学技术与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/571/31486571/b_31486571.jpg)
2.3 案例:随机游走轨迹模拟
随机游走(Random Walk)又称随机游动或随机漫步,与很多自然、社会现象相关。在自然科学研究中,随机游走是扩散过程的基础,广泛地用于对物理和化学粒子扩散现象的模拟。在实际生活中,人们用随机游走描述花粉的布朗运动、证券的涨跌等。
对随机游走过程的理论研究和计算机模拟已成功地应用于数学、物理、化学和经济等学科,在互联网信息检索、图像分割等领域的应用也取得了很好的效果。本节将NumPy的随机数生成函数与ndarray结合,模拟物体在二维平面上随机游走的过程。
假设物体初始位置处在二维坐标系的(0,0)位置,每步随机地沿着x轴方左移或右移一个单位,同时沿着y轴方左移或右移一个单位,左移或右移的概率是相等的。
1.模拟每步游走方向
为了模拟物体在x轴和y轴上每步的随机运动,首先创建一个2×n的二维数组,行序0表示x轴上的运动,行序1表示y轴上的运动,n为移动总步数。数组元素取值为-1或1,1表示向正向移动一个单位,-1表示负向移动一个单位。
在x轴、y轴不同方向上的移动概率相同,可以使用randint()函数在两个整数之间生成2n个随机数。由于randint()函数只能在连续整数范围内生成随机数,因此先生成由0和1组成的随机数组,然后再将所有的0替换为-1。
假设某次随机游走了10步,用randint()函数随机生成每步走的方向,结果可以使用一个2×10的二维数组记录。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_36_1.jpg?sign=1738832344-SuQK2VzHR8DLJFZyQ1TyroFMebn4vmNT-0-0a5c4a8415863a1debd9bc1a4116a11d)
NumPy提供where(condition[, x, y])函数实现数组元素的条件赋值,参数condition是条件表达式,如果condition结果为True,则返回x,否则返回y。x、y可以是数组,也可以是标量。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_36_2.jpg?sign=1738832344-4XWBdi7GQBLfGdqr0K93GSX5lJme9DwC-0-f9115c55da65fb3560da3a498123e30b)
这里where()函数判断rndwlk数组每个元素值和0的关系,如果大于0,则该元素值赋为1,否则赋为-1。
2.计算每步游走后的位置
rndwlk记录了物体每步沿着x轴、y轴运动的方向,计算第i步所处的位置只需分别累计从第1步到第i步沿x轴、y轴移动单位总和即可。ndarray的聚集函数cumsum()就可以实现此功能。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_36_3.jpg?sign=1738832344-63iV1B3Bw8sIUE83Jox6Nbc4CwbkmzZd-0-6e2f9731916bf06d2dfd1cf7b2799de8)
cumsum()函数按行进行累加,即每行第i列的值为原数组0~i列值的和,数组变量position保存了每步结束后物体在二维平面上的位置。
3.计算每步游走后到原点的距离
利用算术运算符和通用函数,可以算出物体在每步结束后到原点的距离。计算得到的浮点数小数位数太长,可以使用np.set_printoptions()函数设置显示的小数位数。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_36_4.jpg?sign=1738832344-2IKgfZtmWnjQRTKf8rC3yWmhJYDfjtyv-0-efca6c88aa3b4b280a1101762ab126de)
对数组dists统计物体距离原点的最大值、最小值和平均值。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_37_1.jpg?sign=1738832344-1FVjgq2MDoGlSMD4zqsE3S4znYFt25bM-0-13846a1afe8519fc341182bb3415e67b)
统计物体游走过程中离原点大于平均距离的次数。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_37_2.jpg?sign=1738832344-xjU9s3Z0g4o0LedV0qfD8VUDVc4Mnksf-0-26d8a7309b5fb5ed1b37a741081e31a7)
dists>dists.mean()生成一个一维的布尔类型数组,大于平均值的位置为True,否则为False。当sum()函数求和时,True的值视为1,False为0,True的个数也就是超出平均距离的次数。
4.绘图展示游走轨迹
将position中的位置数据标识在二维坐标系上,即可展示随机游走的轨迹,如图2-2所示。绘制图形函数的使用方法见第4章。
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_37_4.jpg?sign=1738832344-aBUZmCosabf1Va0iocuWp9MBdpJxqvV3-0-be25b3979e988e102e3546fd7849beb0)
图2-2 二维平面上一次随机漫步的轨迹图
![](https://epubservercos.yuewen.com/4FDE69/17042065704478806/epubprivate/OEBPS/Images/34665_37_3.jpg?sign=1738832344-AQW2QgCtUupg2XLGZPeaX4LZ3ODxogNW-0-8740c176b0d45b72f62d2e0b628e96c7)
思考与练习
1.将随机游走的步数增加到100步,计算物体最终到原点的距离。
2.重复多次随机游走过程,物体到原点距离的变化趋势是什么。