文章目錄
- 題目描述
- 代碼實現
- 關于本題涉及到的幾個函數
- randint()
- where()
- cumsum()
- 題目拓展
- 題目描述
- 代碼實現
- 題目拓展
- 題目描述
- 代碼實現
- argmax()
題目描述
從前有一個酒鬼,喝醉了行走在一條直線上,每走一步方向是不確定的(向前或者向后),當他走了2000步后,試求終點距離原點的距離。
代碼實現
# 酒鬼走了2000步,終點和原點的距離
step = 2000
draw = np.random.randint(0, 2, size=step) # 隨機生成2000步
direction_step = np.where(draw > 0, 1, -1) # 向前走一步記作1,向后走一步記作-1
distance = direction_step.cumsum() # 使用cumsum()函數計算步數的累計和,也就是距原點的距離
result = distance[step - 1] # 用result保存終點距離原點的結果
if result > 0:print("最終較之原點向前走了:", result, "步")
else:print("最終較之原點向后走了:", abs(result), "步")
關于本題涉及到的幾個函數
randint()
格式:randint(low, high=None, size=None, dtype=None)
作用:從指定的dtype以“離散均勻”
分布的方式在“前閉后開”
的區間[ low,high )中返回隨機整數
。如果 high為None(默認值),則結果來自[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
則產生x
,否則產生y
例子:
cumsum()
cumsum是數組統計運算中的方法,作用為:計算所有元素的累計和
格式:cumsum(self, axis=None, dtype=None, out=None)
作用:Return the cumulative sum of the elements along the given axis.
人話就是:根據所給軸——axis的值,進行累計和計算
結合例子來看:
根據上圖我們可以知道,axis=None時,將數組平鋪展開,當成一維數組,然后從第二個元素開始,執行a[i]=a[i]+a[i-1]+…+a[0](i>=1)的操作,axis=0時,沿著行的方向垂直向下豎著加,axis=1時,沿著列的方向水平延申橫著加。
在cumsum的各個參數中,axis決定了累加的方式,而dtype決定了結果的數據類型,而out則是放置結果的備用輸出數組,它的形狀和緩沖區長度必須與預期的輸出相同,如有必要,將強制轉換類型,當out=None時,結果放置在當前數組中,覆蓋之前數組中的值。
PS:關于axis的詳細解析,請移步搞清axis的含義,這一篇就夠了!
題目拓展
題目描述
在上一題的基礎上,我們要計算這個過程中,酒鬼距原點最遠的距離是多少?
代碼實現
沒什么難點,主要就是要記得兼顧向前走和向后走兩種情況,避免忽略邊緣值
distancemax = distance.max() # 向前走最遠的距離
distancemin = distance.min() # 向后走最遠的距離
if abs(distancemin) < distancemax:
# 由于向后走的距離是負數,所以要取其絕對值與向前走的距離相比較print("整個過程中距離原點最遠的距離是向前走了:", distancemax, "步")
else:print("整個過程中距離原點最遠的距離是向后走了:", abs(distancemin), "步")
題目拓展
題目描述
基于原始題目,嘗試計算當第一次距原點的距離大于等于20米時,他總共走了多少步,設每步步長1.5米
代碼實現
仍然是需要注意向后走、向前走兩種情況
steps = 20 / 1.5 # 將距離20米轉換為步數,存儲到steps中
walk = (np.abs(distance) >= steps).argmax()
# (np.abs(distance) >= steps)返回的是一個布爾數組
# 故需要用argmax從滿足條件的布爾數組中返回最大值的索引
print("當酒鬼走了", walk, "步時,此時距離原點的長度是大于或者等于20米的")
argmax()
格式:argmax(a, axis=None, out=None)
作用:Returns the indices of the maximum values along an axis.
說人話就是:返回沿軸的最大值的索引。
用例子看可能更便于理解: