Numpy實現酒鬼漫步問題【以及randint()、where()、cumsum()、argmax()的用法詳解】

文章目錄

  • 題目描述
  • 代碼實現
  • 關于本題涉及到的幾個函數
    • 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.

說人話就是:返回沿軸的最大值的索引。

例子看可能更便于理解:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443870.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百戰c++(11)

31.找錯 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含義,這一篇就夠了!

文章目錄axis的含義旁門左道式理解二維數組中的axis三維數組中的axis正規理解axis的含義 在自己分析之前先擺上官方關于多維數組中axis的值的定義&#xff1a; axis 0&#xff0c;表示第一個維度 axis 1&#xff0c;表示第二個維度 axis -1&#xff0c;表示最后一個維度…

百戰c++(12)

36. 定義 int **a[3][4], 則變量占有的內存空間為&#xff1a;_____ 37. 編寫一個函數&#xff0c;要求輸入年月日時分秒&#xff0c;輸出該年月日時分秒的下一秒。如輸入2004年12月31日23時59分59秒&#xff0c;則輸出2005年1月1日0時0分0秒。 38.寫一個函數&#xff0c;判…

Struts2.3.5+Hibernate3+Spring3.1基于注解實現的多文件上傳,下載

Struts2.3.5Hibernate3Spring3.1基于注解實現的的多文件上傳&#xff0c;下載,這里是上傳文件到數據庫中&#xff0c;上傳控件可以增加和刪除&#xff0c;有需要的朋友可以看看。 以下是源碼下載地址&#xff1a;http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高級索引——reindex()方法

文章目錄索引對象多個數據結構之間共享index類對象is與的區別重置索引——reindex()索引操作Series的索引操作切片不連續索引布爾型索引DataFrame的索引操作獲取不連續的Series對象切片Pandas庫中的操作索引方法索引對象 Index類對象&#xff0c;該對象不可以進行修改&#xf…

【精品計劃1】動態規劃入門到熟悉,看不懂來打我啊

持續更新。。。。。。 2.1斐波那契系列問題 2.2矩陣系列問題 2.3跳躍系列問題 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些變形選講 2.1斐波那契系列問題 在數學上&#xff0c;斐波納契數列以如下被以遞歸的方法定義&#xff1a;F(0)0&#xff0c;F(1)1, F(n)F(n-1)…

Pandas數據排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目錄按索引排序——sort_index()對Series排序對DataFrame排序按值排序——sort_value()對Series進行排序對DataFrame進行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大總結2】大學兩年,寫了這篇幾十萬字的干貨總結

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議 本篇文章應該算是Java后端開發技術棧的&#xff0c;但是大部分是基礎…

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了&#xff0c;這篇文章&#xff0c;值得99%的人收藏 此文后續會改為粉絲可見&#xff0c;所以喜歡的請提前關注和收藏&#xff0c;不迷路。 最近有五本我喜歡的redis實體新書&#xff0c;想要的去評論&#xff0c;我寫個隨機數抽獎包郵送給你。 那么&#xff0c;準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則&#xff0c;又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差&#xff0c;按一定概率確定一個區間&#xff0c;凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題&#xff0c;谷歌面試天天問&#xff0c;來看看吧&#xff0c;帶你來一步一步達到最優解。 谷歌不知道問了多少遍&#xff0c;藍橋杯也出現過&#xff0c;leetcode上是頂級難題&#xff0c;到底是什么題能如此頻繁地出現&#xff1f;我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽&#xff0c;這次的二分也值得你們一看&#xff0c;這個系列是特別用心寫的&#xff0c;準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了&#xff0c;女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集&#xff0c;敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征&#xff1a; 1&#xff09;順序性&#xff1a;處理機嚴格按照程序所規定的順序執行&#xff0c;每一步操作必須在下一步操作開始前執行 2&#xff09;封…

配置tomcat6.0的HTTPS(單向)

利用JDK自帶的產生證書的工具 生成證書 建立一個腳本文件&#xff0c;內容如下&#xff1a; set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之數據重塑——【stack()方法和unstack()方法、pivot()方法】

文章目錄重塑層次化索引對于單層索引的DataFrame類對象stack()方法unstack()方法對于多層索引的DataFrame類對象辨析操作內層索引與外層索引的區別查看多層索引對象轉換后的類型軸向旋轉——pivot()方法重塑層次化索引 Pandas中重塑層次化索引的操作主要是stack()方法和unstac…

超硬核!學霸把操作系統經典算法給敲完了!要知行合一

上期的筆記&#xff0c;瀏覽快1萬了&#xff0c;既然關注的人很多&#xff0c;那就發出來承諾過的算法全模擬&#xff0c;希望幫到你們。 上期的操作系統學霸筆記&#xff0c;考試復習面試全靠它 一、模擬進程調度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之數據轉換——【rename()方法、cut()函數、get_dummies()函數】

文章目錄重命名軸索引離散化連續數據啞變量處理類別型數據重命名軸索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…