更新時間:2022年10月10日14時10分 來源:傳智教育 瀏覽次數(shù):
通過前面對NumPy的學習,相信大家一定對NumPy這個科學計算包有了一定的了解,接下來,本節(jié)將通過酒鬼漫步的案例來介紹如何運用NumPy隨機數(shù)模塊與數(shù)據(jù)處理。
下面先為大家描述一下場景,在一片空曠的平地上(一個二維地面上)有一個酒鬼,他最初停留在原點的位置,這個酒鬼每走一步時,方向是不確定的,在經(jīng)過時間t之后,我們希望計算出這個酒鬼與原點的距離。
例如,這個酒鬼走了2000步(每步為0.5米),向前走一步記為1,向后走一步記為-1,當計算距原點的距離時,就是將所有的步數(shù)進行累計求和。因此,使用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()計算步數(shù)累計和 distance=direction_steps.cumsum()
有了步數(shù)的累計和之后,可以嘗試計算酒鬼距離原點最遠的距離,即分別調用max()與min()計算向前走與向后走的最大值,具體代碼如下。
In [141]: # 使用max()計算向前走的最遠距離 distance.max() Out[141]: 12 In [142]: # 使用min()計算向后走的最遠距離 distance.min() Out[142]: -31
從兩次輸出的結果中可以看出,這個酒鬼走的最遠的距離是朝后方距離原點15.5(31×0.5)米的位置。值得一提的是,由于這里使用的是隨機數(shù),所以每次運行的結果是隨機的。
當酒鬼距原點的距離大于或等于15米時,如果希望計算他總共走了多少步,則可以使用數(shù)學方程“|x×0.5|≥15”完成,其中x表示步數(shù)。要想計算一個數(shù)的絕對值,則需要調用abs()函數(shù)實現(xiàn),不過該函數(shù)返回的是一個布爾數(shù)組,即不滿足條件的值均為False,滿足條件的值均為True。為了從滿足條件的結果中返回最大值的索引,則還需要通過調用argmax()方法來實現(xiàn),具體代碼如下。
In [143]: # 15米換算成步數(shù) steps=15/0.5 (np.abs(distance)>=steps).argmax() Out[143]: 877
從計算結果可以看出,當酒鬼走到877步時,此時距離原點的長度是大于或等于15米的。