更新时间:2022年10月10日14时10分 来源:传智教育 浏览次数:
通过前面对NumPy的学习,相信大家一定对NumPy这个科学计算包有了一定的了解,接下来,本节将通过酒鬼漫步的案例来介绍如何运用NumPy随机数模块与数据处理。
下面先为大家描述一下场景,在一片空旷的平地上(一个二维地面上)有一个酒鬼,他最初停留在原点的位置,这个酒鬼每走一步时,方向是不确定的,在经过时间t之后,我们希望计算出这个酒鬼与原点的距离。
例如,这个酒鬼走了2000步(每步为0.5米),向前走一步记为1,向后走一步记为-1,当计算距原点的距离时,就是将所有的步数进行累计求和。因此,使用random模块来随机生成2000个“掷硬币值”(两个结果任选一个),具体代码如下:
导入numpy包 import numpy as np steps=2000 draws=np.random.randint(0, 2, size=steps) # 当元素为1时,direction_steps为1, # 当元素为0时,direction_steps为-1 direction_steps=np.where(draws>0, 1, -1) # 使用cumsum()计算步数累计和 distance=direction_steps.cumsum()
有了步数的累计和之后,可以尝试计算酒鬼距离原点最远的距离,即分别调用max()与min()计算向前走与向后走的最大值,具体代码如下。
In [141]: # 使用max()计算向前走的最远距离 distance.max() Out[141]: 12 In [142]: # 使用min()计算向后走的最远距离 distance.min() Out[142]: -31
从两次输出的结果中可以看出,这个酒鬼走的最远的距离是朝后方距离原点15.5(31×0.5)米的位置。值得一提的是,由于这里使用的是随机数,所以每次运行的结果是随机的。
当酒鬼距原点的距离大于或等于15米时,如果希望计算他总共走了多少步,则可以使用数学方程“|x×0.5|≥15”完成,其中x表示步数。要想计算一个数的绝对值,则需要调用abs()函数实现,不过该函数返回的是一个布尔数组,即不满足条件的值均为False,满足条件的值均为True。为了从满足条件的结果中返回最大值的索引,则还需要通过调用argmax()方法来实现,具体代码如下。
In [143]: # 15米换算成步数 steps=15/0.5 (np.abs(distance)>=steps).argmax() Out[143]: 877
从计算结果可以看出,当酒鬼走到877步时,此时距离原点的长度是大于或等于15米的。