在数据分析、模拟实验和机器学习中,随机采样 是一个非常常见的操作。
numpy 提供的 numpy.random.choice() 函数让我们可以方便地从数组或序列中随机选取元素。
本文将深入介绍 numpy.random.choice() 的功能、参数、注意事项以及常见实战案例。
一、函数简介
numpy.random.choice() 用于从给定的一维数组中随机抽取元素,
并可以选择是否允许重复(有放回或无放回抽样)。
函数原型如下:
numpy.random.choice(a, size=none, replace=true, p=none)
官方文档介绍地址numpy.random.choice

二、参数详解
| 参数 | 说明 | 默认值 |
|---|---|---|
| a | 如果是整数 n,则表示从 [0, 1, 2, ..., n-1]中抽取;如果是数组,则表示从该数组中抽取。 | 必填 |
| size | 抽取的样本数量。可以是整数或元组,用于生成多维结果。 | none(即返回单个值) |
| replace | 是否允许重复抽取。true表示有放回抽样,false表示无放回抽样。 | true |
| p | 每个元素被抽取的概率(权重)。长度必须与 a相同,且和为 1。 | none(即平均概率) |
三、基础用法示例
示例 1:从整数范围中随机选取
import numpy as np # 从 0~9 中随机选择一个数字 num = np.random.choice(10) print(num)
输出结果示例:
7
说明:
这里 a=10 表示选择范围 [0, 1, 2, ..., 9]。
示例 2:从列表中随机抽样
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)
输出示例(每次结果不同):
[8 8 0 4 7]
这里8出现两次是因为默认有放回抽样。
示例 4:无放回抽样(不重复)
sample = np.random.choice(numbers, size=5, replace=false) print(sample)
输出:
[4 2 9 7 6]
✅ 小技巧:当 replace=false 时,size 不能大于 a 的长度,否则会报错。
四、加权抽样(设置概率分布)
默认情况下,每个元素被抽取的概率是均匀的。
如果你希望某些元素被抽到的概率更高,可以使用参数 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']
💡 实际中常用于模拟随机事件或构建概率分布模型。
五、生成多维随机数组
size 参数可以指定为一个元组,用于生成多维结果。
示例 6:生成二维随机数组
result = np.random.choice(5, size=(2, 3)) print(result)
输出示例:
[[2 1 4]
[3 0 1]]
这在深度学习、图像随机采样或批量数据构造中非常有用。
六、注意事项与常见错误
❌ 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. 无放回抽样数量超限
np.random.choice(5, size=10, replace=false) # valueerror: cannot take a larger sample than population when 'replace=false'
解决方案:要么允许重复(replace=true),要么减小 size。
❌ 3. 非一维数组抽样
a 必须是一维数组,若是多维数组则需先展平:
matrix = np.arange(9).reshape(3, 3) choice = np.random.choice(matrix.flatten(), size=4) print(choice)
七、实战案例
案例 1:模拟掷骰子
dice = [1, 2, 3, 4, 5, 6]
rolls = np.random.choice(dice, size=10, replace=true)
print("掷骰结果:", rolls)
案例 2:随机抽取样本用于验证集
data = np.arange(100)
test_idx = np.random.choice(data, size=20, replace=false)
print("测试集索引:", test_idx)
案例 3:加权随机推荐系统
users = ["新用户", "普通用户", "vip用户"]
weights = [0.6, 0.3, 0.1] # 新用户更容易被推荐
recommend = np.random.choice(users, size=5, p=weights)
print("推荐结果:", recommend)
八、与其他随机函数的对比
| 函数 | 功能 | 是否支持权重 | 示例 |
|---|---|---|---|
| np.random.choice() | 从数组随机选取 | ✅ 是 | 离散抽样 |
| np.random.randin() | 生成随机整数 | ❌ 否 | 均匀分布 |
| np.random.rand() | 生成 0~1 之间的浮点数 | ❌ 否 | 连续分布 |
| np.random.randn() | 生成服从正态分布的浮点数 | ❌ 否 | 高斯分布 |
到此这篇关于numpy random.choice()函数的使用小结的文章就介绍到这了,更多相关numpy random.choice()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论