当前位置: 首页 > news >正文

NumPy random.choice() 函数详解

请添加图片描述

在数据分析、模拟实验和机器学习中,随机采样 是一个非常常见的操作。
NumPy 提供的 numpy.random.choice() 函数让我们可以方便地从数组或序列中随机选取元素。

本文将深入介绍 numpy.random.choice() 的功能、参数、注意事项以及常见实战案例。


文章目录

    • 一、函数简介
    • 二、参数详解
    • 三、基础用法示例
      • 示例 1:从整数范围中随机选取
      • 示例 2:从列表中随机抽样
      • 示例 3:一次抽取多个样本
      • 示例 4:无放回抽样(不重复)
    • 四、加权抽样(设置概率分布)
      • 示例 5:指定抽样概率
    • 五、生成多维随机数组
      • 示例 6:生成二维随机数组
    • 六、注意事项与常见错误
      • ❌ 1. 概率和不为 1
      • ❌ 2. 无放回抽样数量超限
      • ❌ 3. 非一维数组抽样
    • 七、实战案例
      • 案例 1:模拟掷骰子
      • 案例 2:随机抽取样本用于验证集
      • 案例 3:加权随机推荐系统
    • 八、与其他随机函数的对比


一、函数简介

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()生成服从正态分布的浮点数❌ 否高斯分布
http://www.dtcms.com/a/496597.html

相关文章:

  • 网站手机端 怎么做东莞工业品网站建设
  • 广东网站建设网站前端一个页面多少钱
  • Redis分布式锁、Redisson及Redis红锁知识点总结
  • 企业网络建站动漫制作专业专升本大学
  • 东莞网站建设推广方案制作一个网站多少钱啊
  • Spark Shuffle 分区与 AQE 优化
  • 上海住建部网站wordpress下载按钮插件
  • 深度解析:电商API的核心功能与应用
  • 网站建设 定制移动端开发工具
  • html5网站开发费用什么是网络营销?网络营销有哪些功能
  • 衡石 HQL:以函数为基,构建AI时代的敏捷语义层
  • cms网站系统网站建设评审会总结发言
  • 倍数关系:最多能选出多少个数
  • 建设一个怎样的自己的网站首页苏州做网站优化的
  • Kioptrix Level 1渗透测试
  • 中国林业工程建设协会网站企业网站建设的提案
  • 用Vscode编译正点原子ESP32例程报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件
  • 温州专业微网站制作公司哪家好网站开发外包报价
  • 超星网站开发实战答案asp网站安全如何做
  • YOLOv3 核心笔记:多尺度特征融合与全面性能升级
  • 郑州建网站费用快照网站
  • LeetCode 刷题【123. 买卖股票的最佳时机 III】
  • 基于高通跃龙 QCS6490 平台的Sherpa快速部署
  • 赤峰网站建设 公司阿里云建设网站好不好
  • 个人网站备案需要哪些资料网站建立教学
  • 无锡网站制作电话邢台168交友最新信息
  • Termux 安装 PicList 图库服务,typora、obsidian写作一键上传图片到云端
  • 微信网站方案建筑企业资质加盟
  • 做网站多ui设计与网站建设
  • 数据结构——二十二、并查集(王道408)