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

抽樣個數(shù)為1000。

抽樣個數(shù)為10000。

抽樣個數(shù)為50000。

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

從圖上可以看到,numpy.random.choice()的用時確實保持不變,而random.sample() 用時會隨著抽樣比例的增加而線性增長。
總結(jié)
從對象類型上看,random.sample方法比numpy.random.choice方法適用范圍廣。
從速度上看,當(dāng)抽樣數(shù)量小的時候,random.sample方法比numpy.random.choice方法快很多;當(dāng)抽樣數(shù)量很大的時候,random.sample方法就不如numpy.random.choice方法了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
最新tensorflow與pytorch環(huán)境搭建的實現(xiàn)步驟
深度學(xué)習(xí)相關(guān)的熱門框架主要為Tensorflow和Pytorch,本文主要介紹了搭建最新tensorflow與pytorch環(huán)境,具有一定的參考價值,感興趣的可以了解一下2024-04-04
關(guān)于Pyinstaller打包eel和pygame需要注意的坑
這篇文章主要介紹了關(guān)于Pyinstaller打包eel和pygame需要注意的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Python利用Spire.PDF for Python庫抽取PDF文檔文本
在當(dāng)今數(shù)字化的世界中,PDF無疑是最普遍的文檔格式之一,無論是報告、合同、發(fā)票還是學(xué)術(shù)論文,PDF都承載著海量的信息,本文將深入探討如何利用Spire.PDF for Python庫,高效、準(zhǔn)確地從PDF文檔中提取文本,需要的朋友可以參考下2026-02-02
關(guān)于Python中 循環(huán)器 itertools的介紹
循環(huán)器是對象的容器,包含有多個對象。通過調(diào)用循環(huán)器的next()方法 (__next__()方法,在Python 3.x中),循環(huán)器將依次返回一個對象。直到所有的對象遍歷窮盡,循環(huán)器將舉出StopIteration錯誤。這篇文章將對此做一個詳細(xì)介紹,感興趣的小伙伴請參考下面文字內(nèi)容2021-09-09
python小程序基于Jupyter實現(xiàn)天氣查詢的方法
這篇文章主要介紹了python小程序基于Jupyter實現(xiàn)天氣查詢的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

