NumPy random.choice()函数的使用小结

 更新时间:2026年01月06日 11:07:06   作者:程序员风屿  
随机采样 是一个非常常见的操作,NumPy提供的numpy.random.choice() 函数让我们可以方便地从数组或序列中随机选取元素,本文将带深入介绍 numpy.random.choice() 的功能及常见实战案例,感兴趣的可以了解一下

在数据分析、模拟实验和机器学习中,随机采样 是一个非常常见的操作。
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()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何将python的数据存储到mysql数据库中

    如何将python的数据存储到mysql数据库中

    在很多数据处理项目中,将数据存储到数据库中是非常常见的操作,下面这篇文章主要给大家介绍了关于如何将python的数据存储到mysql数据库中的相关资料,需要的朋友可以参考下
    2023-12-12
  • python实现俄罗斯方块小游戏

    python实现俄罗斯方块小游戏

    这篇文章主要为大家详细介绍了python实现俄罗斯方块小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • python中super().__init__()的用法

    python中super().__init__()的用法

    python里的super().__init__()有什么作用?很多同学没有弄清楚。super()用来调用父类(基类)的方法,__init__()是类的构造方法,感兴趣的小伙伴可以参考阅读本文
    2023-03-03
  • Pandas 时间序列分析中的resample函数

    Pandas 时间序列分析中的resample函数

    这篇文章主要介绍了Pandas 时间序列分析中的resample函数,Pandas 中的resample函数用于各种频率的转换工作,下面我们就来看看其的参数、相关资料等,需要的小伙伴可以参考一下,希望给你带来帮助
    2022-02-02
  • dpn网络的pytorch实现方式

    dpn网络的pytorch实现方式

    今天小编就为大家分享一篇dpn网络的pytorch实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 解决Djang2.0.1中的reverse导入失败的问题

    解决Djang2.0.1中的reverse导入失败的问题

    今天小编就为大家分享一篇解决Djang2.0.1中的reverse导入失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python kafka 多线程消费者&手动提交实例

    python kafka 多线程消费者&手动提交实例

    今天小编就为大家分享一篇python kafka 多线程消费者&手动提交实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 手把手教你部署AI小说生成器(Python环境搭建)

    手把手教你部署AI小说生成器(Python环境搭建)

    本文详细介绍了如何使用Python+AI从零开始搭建属于自己的AI小说生成器,文章分为环境准备、第一次安装、关机重启、配置大脑等步骤进行讲解,帮助用户轻松实现AI辅助创作
    2026-04-04
  • Django+python服务器部署与环境部署教程详解

    Django+python服务器部署与环境部署教程详解

    这篇文章主要介绍了Django+python服务器部署与环境部署教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • python设定并获取socket超时时间的方法

    python设定并获取socket超时时间的方法

    今天小编就为大家分享一篇python设定并获取socket超时时间的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论