Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】
文章目錄
- 題目描述
- 代碼實現(xiàn)
- 關(guān)于本題涉及到的幾個函數(shù)
- randint()
- where()
- cumsum()
- 題目拓展
- 題目描述
- 代碼實現(xiàn)
- 題目拓展
- 題目描述
- 代碼實現(xiàn)
- argmax()
題目描述
從前有一個酒鬼,喝醉了行走在一條直線上,每走一步方向是不確定的(向前或者向后),當(dāng)他走了2000步后,試求終點距離原點的距離。
代碼實現(xiàn)
# 酒鬼走了2000步,終點和原點的距離 step = 2000 draw = np.random.randint(0, 2, size=step) # 隨機(jī)生成2000步 direction_step = np.where(draw > 0, 1, -1) # 向前走一步記作1,向后走一步記作-1 distance = direction_step.cumsum() # 使用cumsum()函數(shù)計算步數(shù)的累計和,也就是距原點的距離 result = distance[step - 1] # 用result保存終點距離原點的結(jié)果 if result > 0:print("最終較之原點向前走了:", result, "步") else:print("最終較之原點向后走了:", abs(result), "步")關(guān)于本題涉及到的幾個函數(shù)
randint()
格式:randint(low, high=None, size=None, dtype=None)
作用:從指定的dtype以“離散均勻”分布的方式在“前閉后開”的區(qū)間[ low,high )中返回隨機(jī)整數(shù)。如果 high為None(默認(rèn)值),則結(jié)果來自[0,low)。
例子:
where()
格式:where(condition, x=None, y=None)
也可寫成:where(condition, [x, y])作用:Return elements chosen from x or y depending on condition.
簡單來講,condition作為判斷條件,為True則產(chǎn)生x,否則產(chǎn)生y
例子:
cumsum()
cumsum是數(shù)組統(tǒng)計運(yùn)算中的方法,作用為:計算所有元素的累計和格式:cumsum(self, axis=None, dtype=None, out=None)
作用:Return the cumulative sum of the elements along the given axis.
人話就是:根據(jù)所給軸——axis的值,進(jìn)行累計和計算
結(jié)合例子來看:
根據(jù)上圖我們可以知道,axis=None時,將數(shù)組平鋪展開,當(dāng)成一維數(shù)組,然后從第二個元素開始,執(zhí)行a[i]=a[i]+a[i-1]+…+a[0](i>=1)的操作,axis=0時,沿著行的方向垂直向下豎著加,axis=1時,沿著列的方向水平延申橫著加。
在cumsum的各個參數(shù)中,axis決定了累加的方式,而dtype決定了結(jié)果的數(shù)據(jù)類型,而out則是放置結(jié)果的備用輸出數(shù)組,它的形狀和緩沖區(qū)長度必須與預(yù)期的輸出相同,如有必要,將強(qiáng)制轉(zhuǎn)換類型,當(dāng)out=None時,結(jié)果放置在當(dāng)前數(shù)組中,覆蓋之前數(shù)組中的值。
PS:關(guān)于axis的詳細(xì)解析,請移步搞清axis的含義,這一篇就夠了!
題目拓展
題目描述
在上一題的基礎(chǔ)上,我們要計算這個過程中,酒鬼距原點最遠(yuǎn)的距離是多少?代碼實現(xiàn)
沒什么難點,主要就是要記得兼顧向前走和向后走兩種情況,避免忽略邊緣值 distancemax = distance.max() # 向前走最遠(yuǎn)的距離 distancemin = distance.min() # 向后走最遠(yuǎn)的距離 if abs(distancemin) < distancemax: # 由于向后走的距離是負(fù)數(shù),所以要取其絕對值與向前走的距離相比較print("整個過程中距離原點最遠(yuǎn)的距離是向前走了:", distancemax, "步") else:print("整個過程中距離原點最遠(yuǎn)的距離是向后走了:", abs(distancemin), "步")題目拓展
題目描述
基于原始題目,嘗試計算當(dāng)?shù)谝淮尉嘣c的距離大于等于20米時,他總共走了多少步,設(shè)每步步長1.5米代碼實現(xiàn)
仍然是需要注意向后走、向前走兩種情況 steps = 20 / 1.5 # 將距離20米轉(zhuǎn)換為步數(shù),存儲到steps中 walk = (np.abs(distance) >= steps).argmax() # (np.abs(distance) >= steps)返回的是一個布爾數(shù)組 # 故需要用argmax從滿足條件的布爾數(shù)組中返回最大值的索引 print("當(dāng)酒鬼走了", walk, "步時,此時距離原點的長度是大于或者等于20米的")argmax()
格式:argmax(a, axis=None, out=None)
作用:Returns the indices of the maximum values along an axis.
說人話就是:返回沿軸的最大值的索引。
用例子看可能更便于理解:
總結(jié)
以上是生活随笔為你收集整理的Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交通银行信用卡注销流程 注销交通信用卡流
- 下一篇: leetcode645. 错误的集合