NumPy random.choice()函數(shù)的使用小結(jié)
在數(shù)據(jù)分析、模擬實(shí)驗(yàn)和機(jī)器學(xué)習(xí)中,隨機(jī)采樣 是一個非常常見的操作。
NumPy 提供的 numpy.random.choice() 函數(shù)讓我們可以方便地從數(shù)組或序列中隨機(jī)選取元素。
本文將深入介紹 numpy.random.choice() 的功能、參數(shù)、注意事項(xiàng)以及常見實(shí)戰(zhàn)案例。
一、函數(shù)簡介
numpy.random.choice() 用于從給定的一維數(shù)組中隨機(jī)抽取元素,
并可以選擇是否允許重復(fù)(有放回或無放回抽樣)。
函數(shù)原型如下:
numpy.random.choice(a, size=None, replace=True, p=None)
官方文檔介紹地址numpy.random.choice

二、參數(shù)詳解
| 參數(shù) | 說明 | 默認(rèn)值 |
|---|---|---|
| a | 如果是整數(shù) n,則表示從 [0, 1, 2, ..., n-1]中抽取;如果是數(shù)組,則表示從該數(shù)組中抽取。 | 必填 |
| size | 抽取的樣本數(shù)量??梢允钦麛?shù)或元組,用于生成多維結(jié)果。 | None(即返回單個值) |
| replace | 是否允許重復(fù)抽取。True表示有放回抽樣,F(xiàn)alse表示無放回抽樣。 | True |
| p | 每個元素被抽取的概率(權(quán)重)。長度必須與 a相同,且和為 1。 | None(即平均概率) |
三、基礎(chǔ)用法示例
示例 1:從整數(shù)范圍中隨機(jī)選取
import numpy as np # 從 0~9 中隨機(jī)選擇一個數(shù)字 num = np.random.choice(10) print(num)
輸出結(jié)果示例:
7
說明:
這里 a=10 表示選擇范圍 [0, 1, 2, ..., 9]。
示例 2:從列表中隨機(jī)抽樣
fruits = ['apple', 'banana', 'cherry', 'orange'] sample = np.random.choice(fruits) print(sample)
輸出示例:
banana
示例 3:一次抽取多個樣本
numbers = np.arange(10) sample = np.random.choice(numbers, size=5) print(sample)
輸出示例(每次結(jié)果不同):
[8 8 0 4 7]
這里8出現(xiàn)兩次是因?yàn)槟J(rèn)有放回抽樣。
示例 4:無放回抽樣(不重復(fù))
sample = np.random.choice(numbers, size=5, replace=False) print(sample)
輸出:
[4 2 9 7 6]
? 小技巧:當(dāng) replace=False 時,size 不能大于 a 的長度,否則會報(bào)錯。
四、加權(quán)抽樣(設(shè)置概率分布)
默認(rèn)情況下,每個元素被抽取的概率是均勻的。
如果你希望某些元素被抽到的概率更高,可以使用參數(shù) p。
示例 5:指定抽樣概率
items = ['A', 'B', 'C'] prob = [0.7, 0.2, 0.1] # 概率總和必須為 1 samples = np.random.choice(items, size=10, p=prob) print(samples)
可能輸出:
['A' 'A' 'B' 'A' 'C' 'A' 'A' 'B' 'A' 'A']
?? 實(shí)際中常用于模擬隨機(jī)事件或構(gòu)建概率分布模型。
五、生成多維隨機(jī)數(shù)組
size 參數(shù)可以指定為一個元組,用于生成多維結(jié)果。
示例 6:生成二維隨機(jī)數(shù)組
result = np.random.choice(5, size=(2, 3)) print(result)
輸出示例:
[[2 1 4]
[3 0 1]]
這在深度學(xué)習(xí)、圖像隨機(jī)采樣或批量數(shù)據(jù)構(gòu)造中非常有用。
六、注意事項(xiàng)與常見錯誤
? 1. 概率和不為 1
np.random.choice([1, 2, 3], p=[0.5, 0.5, 0.2]) # ValueError: probabilities do not sum to 1
必須保證:
sum(p) == 1
? 2. 無放回抽樣數(shù)量超限
np.random.choice(5, size=10, replace=False) # ValueError: Cannot take a larger sample than population when 'replace=False'
解決方案:要么允許重復(fù)(replace=True),要么減小 size。
? 3. 非一維數(shù)組抽樣
a 必須是一維數(shù)組,若是多維數(shù)組則需先展平:
matrix = np.arange(9).reshape(3, 3) choice = np.random.choice(matrix.flatten(), size=4) print(choice)
七、實(shí)戰(zhàn)案例
案例 1:模擬擲骰子
dice = [1, 2, 3, 4, 5, 6]
rolls = np.random.choice(dice, size=10, replace=True)
print("擲骰結(jié)果:", rolls)
案例 2:隨機(jī)抽取樣本用于驗(yàn)證集
data = np.arange(100)
test_idx = np.random.choice(data, size=20, replace=False)
print("測試集索引:", test_idx)
案例 3:加權(quán)隨機(jī)推薦系統(tǒng)
users = ["新用戶", "普通用戶", "VIP用戶"]
weights = [0.6, 0.3, 0.1] # 新用戶更容易被推薦
recommend = np.random.choice(users, size=5, p=weights)
print("推薦結(jié)果:", recommend)
八、與其他隨機(jī)函數(shù)的對比
| 函數(shù) | 功能 | 是否支持權(quán)重 | 示例 |
|---|---|---|---|
| np.random.choice() | 從數(shù)組隨機(jī)選取 | ? 是 | 離散抽樣 |
| np.random.randin() | 生成隨機(jī)整數(shù) | ? 否 | 均勻分布 |
| np.random.rand() | 生成 0~1 之間的浮點(diǎn)數(shù) | ? 否 | 連續(xù)分布 |
| np.random.randn() | 生成服從正態(tài)分布的浮點(diǎn)數(shù) | ? 否 | 高斯分布 |
到此這篇關(guān)于NumPy random.choice()函數(shù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)NumPy random.choice()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于adfuller函數(shù)返回值的參數(shù)說明與記錄
這篇文章主要介紹了關(guān)于adfuller函數(shù)返回值的參數(shù)說明與記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Python集合中remove()函數(shù)的使用方法詳解
這篇文章主要給大家介紹了關(guān)于python集合中remove()函數(shù)的使用,以及在使用Python集合的remove方法時應(yīng)注意的事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Flask登錄注冊項(xiàng)目的簡單實(shí)現(xiàn)
一個簡單的用戶注冊和登錄的頁面,涉及到驗(yàn)證,數(shù)據(jù)庫存儲等等,本文主要介紹了Flask登錄注冊項(xiàng)目的簡單實(shí)現(xiàn),從目錄結(jié)構(gòu)開始,感興趣的可以了解一下2021-05-05
Python虛擬環(huán)境venv實(shí)戰(zhàn)過程詳解
Python的虛擬環(huán)境可以幫助我們在同一臺機(jī)器上,同時使用不同的Python版本和庫,方便管理和開發(fā),下面這篇文章主要給大家介紹了關(guān)于Python虛擬環(huán)境venv的相關(guān)資料,需要的朋友可以參考下2023-06-06
python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽和字體改變的方法
今天小編就為大家分享一篇python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽和字體改變的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python利用 pytesseract快速識別提取圖片中的文字((圖片識別)
本文介紹了tesseract的python調(diào)用,也就是pytesseract庫,其中還有一些其他的內(nèi)容并沒有涉及,僅涉及到了圖片提取文字,如果你對其感興趣,可以深入探索一下,也希望能和我探討一下2022-11-11
Python實(shí)現(xiàn)Excel和TXT文本之間相互轉(zhuǎn)換
Excel是一種具有強(qiáng)大的數(shù)據(jù)處理和圖表制作功能的電子表格文件,而TXT則是一種簡單通用、易于編輯的純文本文件,本文將介紹如何使用Python并結(jié)合相關(guān)庫來實(shí)現(xiàn) Excel 和 TXT 文本文件之間的相互轉(zhuǎn)換,需要的朋友可以參考下2024-06-06
關(guān)于PySnooper 永遠(yuǎn)不要使用print進(jìn)行調(diào)試的問題
這篇文章主要介紹了關(guān)于PySnooper 永遠(yuǎn)不要使用print進(jìn)行調(diào)試的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03

