日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】

發(fā)布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 代碼實現(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。