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

二、參數(shù)詳解
| 參數(shù) | 說(shuō)明 | 默認(rèn)值 |
|---|---|---|
| a | 如果是整數(shù) n,則表示從 [0, 1, 2, ..., n-1]中抽取;如果是數(shù)組,則表示從該數(shù)組中抽取。 | 必填 |
| size | 抽取的樣本數(shù)量??梢允钦麛?shù)或元組,用于生成多維結(jié)果。 | None(即返回單個(gè)值) |
| replace | 是否允許重復(fù)抽取。True表示有放回抽樣,F(xiàn)alse表示無(wú)放回抽樣。 | True |
| p | 每個(gè)元素被抽取的概率(權(quán)重)。長(zhǎng)度必須與 a相同,且和為 1。 | None(即平均概率) |
三、基礎(chǔ)用法示例
示例 1:從整數(shù)范圍中隨機(jī)選取
import numpy as np # 從 0~9 中隨機(jī)選擇一個(gè)數(shù)字 num = np.random.choice(10) print(num)
輸出結(jié)果示例:
7
說(shuō)明:
這里 a=10 表示選擇范圍 [0, 1, 2, ..., 9]。
示例 2:從列表中隨機(jī)抽樣
fruits = ['apple', 'banana', 'cherry', 'orange'] sample = np.random.choice(fruits) print(sample)
輸出示例:
banana
示例 3:一次抽取多個(gè)樣本
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:無(wú)放回抽樣(不重復(fù))
sample = np.random.choice(numbers, size=5, replace=False) print(sample)
輸出:
[4 2 9 7 6]
? 小技巧:當(dāng) replace=False 時(shí),size 不能大于 a 的長(zhǎng)度,否則會(huì)報(bào)錯(cuò)。
四、加權(quán)抽樣(設(shè)置概率分布)
默認(rèn)情況下,每個(gè)元素被抽取的概率是均勻的。
如果你希望某些元素被抽到的概率更高,可以使用參數(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ù)可以指定為一個(gè)元組,用于生成多維結(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)與常見(jiàn)錯(cuò)誤
? 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. 無(wú)放回抽樣數(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("測(cè)試集索引:", 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ù)的對(duì)比
| 函數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何將python的數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫(kù)中
在很多數(shù)據(jù)處理項(xiàng)目中,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中是非常常見(jiàn)的操作,下面這篇文章主要給大家介紹了關(guān)于如何將python的數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫(kù)中的相關(guān)資料,需要的朋友可以參考下2023-12-12
Pandas?時(shí)間序列分析中的resample函數(shù)
這篇文章主要介紹了Pandas?時(shí)間序列分析中的resample函數(shù),Pandas?中的resample函數(shù)用于各種頻率的轉(zhuǎn)換工作,下面我們就來(lái)看看其的參數(shù)、相關(guān)資料等,需要的小伙伴可以參考一下,希望給你帶來(lái)幫助2022-02-02
dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式
今天小編就為大家分享一篇dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
解決Djang2.0.1中的reverse導(dǎo)入失敗的問(wèn)題
今天小編就為大家分享一篇解決Djang2.0.1中的reverse導(dǎo)入失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python kafka 多線程消費(fèi)者&手動(dòng)提交實(shí)例
今天小編就為大家分享一篇python kafka 多線程消費(fèi)者&手動(dòng)提交實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
手把手教你部署AI小說(shuō)生成器(Python環(huán)境搭建)
本文詳細(xì)介紹了如何使用Python+AI從零開(kāi)始搭建屬于自己的AI小說(shuō)生成器,文章分為環(huán)境準(zhǔn)備、第一次安裝、關(guān)機(jī)重啟、配置大腦等步驟進(jìn)行講解,幫助用戶輕松實(shí)現(xiàn)AI輔助創(chuàng)作2026-04-04
Django+python服務(wù)器部署與環(huán)境部署教程詳解
這篇文章主要介紹了Django+python服務(wù)器部署與環(huán)境部署教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
python設(shè)定并獲取socket超時(shí)時(shí)間的方法
今天小編就為大家分享一篇python設(shè)定并獲取socket超時(shí)時(shí)間的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

