Python之random.sample()和numpy.random.choice()的優(yōu)缺點(diǎn)說明
對(duì)比
python中random.sample()方法可以隨機(jī)地從指定列表中提取出N個(gè)不同的元素,列表的維數(shù)沒有限制。
有文章指出:在實(shí)踐中發(fā)現(xiàn),當(dāng)N的值比較大的時(shí)候,該方法執(zhí)行速度很慢。
可以用numpy random模塊中的choice方法來提升隨機(jī)提取的效率。
(有問題,從該文章看不出來random.sample方法比choice方法慢多少,我自己仿真倒是發(fā)現(xiàn)random.sample方法比choice方法快的多,后面會(huì)舉例說明)
numpy.random.choice() 對(duì)抽樣對(duì)象有要求,必須是整數(shù)或者一維數(shù)組(列表),不能對(duì)超過一維的數(shù)據(jù)進(jìn)行抽樣,這是其缺點(diǎn)。
random.sample() 和 numpy.random.choice() 的優(yōu)點(diǎn)都是可以指定抽樣的個(gè)數(shù),一次性從列表中不重復(fù)地抽樣出指定個(gè)數(shù)的元素,其中 random.sample()默認(rèn)就是不重復(fù)抽樣(不放回的抽樣),而numpy.random.choice()默認(rèn)是可以重復(fù)抽樣,要想不重復(fù)地抽樣,需要設(shè)置replace參數(shù)為False,用法如下:

補(bǔ)充
前面說random.sample方法比choice方法快的多,下面附圖為證。


更新
有博友留言說,numpy.random.choice()與 random.sample() 兩者適合的情況不同,建議增加抽樣數(shù)量再試試,下面是逐步增加抽樣數(shù)量后的結(jié)果。
列表元素為100000個(gè),抽樣個(gè)數(shù)為9。

抽樣個(gè)數(shù)為1000。

抽樣個(gè)數(shù)為10000。

抽樣個(gè)數(shù)為50000。

從以上實(shí)驗(yàn)來看,numpy.random.choice()抽樣方法的時(shí)間幾乎不會(huì)隨著抽樣數(shù)量的變化而變化,而random.sample() 會(huì)隨著抽樣數(shù)量的增加而增加。
所以當(dāng)數(shù)量較少的時(shí)候,random.sample() 用時(shí)非常少,而numpy.random.choice()則很長(zhǎng);當(dāng)抽樣數(shù)量很大的時(shí)候,numpy.random.choice()幾乎不變,而random.sample() 用時(shí)變長(zhǎng)。
簡(jiǎn)單繪制一下測(cè)試結(jié)果,如下所示

從圖上可以看到,numpy.random.choice()的用時(shí)確實(shí)保持不變,而random.sample() 用時(shí)會(huì)隨著抽樣比例的增加而線性增長(zhǎng)。
總結(jié)
從對(duì)象類型上看,random.sample方法比numpy.random.choice方法適用范圍廣。
從速度上看,當(dāng)抽樣數(shù)量小的時(shí)候,random.sample方法比numpy.random.choice方法快很多;當(dāng)抽樣數(shù)量很大的時(shí)候,random.sample方法就不如numpy.random.choice方法了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python讀取Word文檔中的Excel嵌入文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了Python讀取Word文檔中的Excel嵌入文件的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-12-12
python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)使用Keras進(jìn)行回歸運(yùn)算
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)使用Keras進(jìn)行回歸運(yùn)算,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python實(shí)現(xiàn)音樂播放和下載小程序功能
這篇文章主要介紹了python實(shí)現(xiàn)音樂播放和下載小程序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Python實(shí)現(xiàn)城市公交網(wǎng)絡(luò)分析與可視化
這篇文章主要介紹了通過Python爬取城市公交站點(diǎn)、線路及其經(jīng)緯度數(shù)據(jù),并做可視化數(shù)據(jù)分析。文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2021-12-12
Python獲取運(yùn)行目錄與當(dāng)前腳本目錄的方法
這篇文章主要介紹了Python獲取運(yùn)行目錄與當(dāng)前腳本目錄的方法,涉及Python目錄操作與系統(tǒng)相關(guān)變量的獲取技巧,需要的朋友可以參考下2015-06-06
python socket網(wǎng)絡(luò)編程之粘包問題詳解
這篇文章主要介紹了python socket網(wǎng)絡(luò)編程之粘包問題詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Python腳本實(shí)現(xiàn)Web漏洞掃描工具
這是去年畢設(shè)做的一個(gè)Web漏洞掃描小工具,主要針對(duì)簡(jiǎn)單的SQL注入漏洞、SQL盲注和XSS漏洞。下文給大家介紹了使用說明和源代碼,一起看看吧2016-10-10
詳解如何使用python實(shí)現(xiàn)猜數(shù)字游戲
“猜數(shù)字”游戲是一款簡(jiǎn)單而有趣的小游戲,玩家需要在給定的范圍內(nèi)猜出一個(gè)由計(jì)算機(jī)隨機(jī)生成的數(shù)字,本文將使用Python語言來實(shí)現(xiàn)這款游戲,并詳細(xì)介紹其實(shí)現(xiàn)過程,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-04-04

