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

numpy的random函数总结

np.random.randint()

返回随机整数

1、生成一个随机数:

# 生成一个随机整数
random_num = np.random.randint(3, 10)
print(random_num)  # 可能输出:5

2、生成多个随机数:

# 生成多个随机整数
random_array = np.random.randint(3, 10, size=5)
print(random_array)  # 可能输出:[7 3 9 4 6]
np.random.choice(a, size=None, replace=True, p=None)
参数说明:
a:输入数组或整数
1、如果是数组:从数组元素中随机选择
2、如果是整数 n:相当于从 np.arange(n)中选择
size:输出形状(整数或元组)
replace:是否允许重复抽样(默认 True)
p:每个元素被选中的概率

1、从列表中选择:

# 从列表中选择一个元素
arr = ['A', 'B', 'C', 'D']
result = np.random.choice(arr)
print(result)  # 可能输出:'B'
# 选择多个元素
result = np.random.choice(arr, size=3)
print(result)  # 可能输出:['A', 'C', 'B']

2、从数字范围选择:

# 从 0-9 中选择
result = np.random.choice(10, size=5)
print(result)  # 可能输出:[3 7 1 9 4]
# 从指定范围数组中选择
result = np.random.choice([2, 4, 6, 8], size=3)
print(result)  # 可能输出:[6 2 8]

3、 控制抽样方式:

arr = ['A', 'B', 'C', 'D']# 不允许重复抽样
result = np.random.choice(arr, size=3, replace=False)
print(result)  # 可能输出:['B', 'D', 'A'],不会重复
# 设置概率分布
probabilities = [0.1, 0.2, 0.3, 0.4]  # A,B,C,D 分别的概率
result = np.random.choice(arr, size=5, p=probabilities)
print(result)  # D 出现的概率最高

4、 生成多维数组

# 生成 2x3 的随机选择数组
result = np.random.choice(['X', 'Y', 'Z'], size=(2, 3))
print(result)
# 可能输出:
# [['X' 'Z' 'Y']
#  ['Y' 'X' 'Z']]

5、实际应用场景

# 模拟掷骰子
dice = [1, 2, 3, 4, 5, 6]
rolls = np.random.choice(dice, size=10)
print(f"10次掷骰子结果: {rolls}")
# 抽奖系统
prizes = ['一等奖', '二等奖', '三等奖', '谢谢参与']
prob = [0.01, 0.09, 0.3, 0.6]  # 中奖概率
winner = np.random.choice(prizes, p=prob)
print(f"抽奖结果: {winner}")

注意事项

  1. 概率总和必须为 1:当使用 p 参数时,所有概率之和必须等于 1

  2. 无放回抽样的限制:当 replace=False 时,size 不能大于 a 的长度

  3. 随机种子:可以使用 np.random.seed() 获得可重复的结果

# 生成随机数据
data = np.random.normal(0, 1, 100)  # 均值为0,标准差为1的100个随机数
# 然后进行随机操作,比如
random_num = np.random.rand(3)
# 这些函数的输出范围:
print("randint(0, 100):", np.random.randint(0, 100))        # 0-99
print("random():", np.random.random())                      # [0.0, 1.0)
print("randn():", np.random.randn())                        # 标准正态分布
print("uniform(5, 10):", np.random.uniform(5, 10))          # [5.0, 10.0)
# 标准正态分布 (均值0, 标准差1)
np.random.randn()           # 单个值
np.random.randn(2, 3)       # 2x3 数组# 生成指定形状的 [0,1) 均匀分布
np.random.rand(5)           # 5个随机数
np.random.rand(2, 2)        # 2x2 数组

连续分布:

# 正态分布
np.random.normal(0, 1)              # 标准正态
np.random.normal(10, 2, 100)        # 均值10, 标准差2, 100个样本# 其他连续分布
np.random.beta(2, 5, 10)            # Beta分布
np.random.gamma(2, 2, 10)           # Gamma分布
np.random.exponential(1, 10)        # 指数分布
np.random.chisquare(2, 10)          # 卡方分布

离散分布:

# 二项分布
np.random.binomial(10, 0.5, 20)     # n=10, p=0.5, 20次试验# 泊松分布
np.random.poisson(5, 10)            # λ=5, 10个样本# 其他离散分布
np.random.geometric(0.3, 10)        # 几何分布
np.random.hypergeometric(10, 5, 7, 10) # 超几何分布

随机选择:

arr = [1, 2, 3, 4, 5]# 从数组中随机选择
np.random.choice(arr, size=3)               # 选择3个元素
np.random.choice(arr, size=5, replace=False) # 无放回抽样
np.random.choice(arr, p=[0.1, 0.1, 0.3, 0.3, 0.2]) # 指定概率# 随机排列
np.random.permutation(arr)          # 返回新数组
np.random.shuffle(arr)              # 原地打乱原数组

多元分布:

# 多元正态分布
mean = [0, 0]
cov = [[1, 0.5], [0.5, 1]]
np.random.multivariate_normal(mean, cov, 100)# 多项分布
np.random.multinomial(20, [0.2, 0.3, 0.5]) # 20次试验, 3个类别

其他分布:

# 狄利克雷分布
np.random.dirichlet([1, 2, 3])      # 参数为 [α1, α2, α3]# 逻辑分布
np.random.logistic(0, 1, 10)        # 位置0, 尺度1# 帕累托分布
np.random.pareto(3, 10)             # 形状参数3

随机种子和状态:

# 设置随机种子
np.random.seed(42)# 获取和设置随机状态
state = np.random.get_state()       # 获取当前状态
np.random.set_state(state)          # 恢复状态# 现代推荐用法 (NumPy 1.17+)
rng = np.random.default_rng(42)     # 创建生成器对象
rng.integers(0, 10, 5)              # 使用生成器

实用函数:

# 生成随机字节
np.random.bytes(10)                 # 10个随机字节# 从给定列表生成随机样本
data = np.arange(100)
np.random.choice(data, 10, replace=False)  # 不放回抽样# 随机打乱数组索引
indices = np.random.permutation(len(data))

从 NumPy 1.17 开始,推荐使用 Generator 对象

# 创建生成器
rng = np.random.default_rng(42)# 使用生成器的方法
rng.random()                        # 替代 random()
rng.integers(0, 10)                 # 替代 randint()
rng.normal(0, 1)                    # 替代 normal()
rng.choice([1, 2, 3, 4])            # 替代 choice()
rng.permutation([1, 2, 3, 4])       # 替代 permutation()
np.random.seed(数字)

后面可以是任意的整数。可以使负数、0、整数

np.random.seed(42)# 多个随机函数都会受到种子的影响
a = np.random.rand(3)          # 随机浮点数
b = np.random.randint(1, 10, 5) # 随机整数
c = np.random.choice(['A', 'B', 'C'], size=3)print("随机浮点数:", a)  # 总是相同
print("随机整数:", b)    # 总是相同
print("随机选择:", c)    # 总是相同

重置种子:

# 在代码的不同部分使用不同种子
np.random.seed(42)
data1 = np.random.rand(5)np.random.seed(123)  # 重置种子
data2 = np.random.rand(5)print("数据1:", data1)  # 由种子42决定
print("数据2:", data2)  # 由种子123决定

随机种子的使用场景:保证实验可以重复进行

from sklearn.model_selection import train_test_split
import numpy as np# 设置随机种子
np.random.seed(42)# 分割数据集(结果可重复)
X = np.random.rand(100, 5)  # 100个样本,5个特征
y = np.random.randint(0, 2, 100)  # 二分类标签X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)print(f"训练集大小: {len(X_train)}")  # 总是80
print(f"测试集大小: {len(X_test)}")   # 总是20

常用函数总结表:

函数描述示例
random()[0,1) 均匀分布np.random.random((2,2))
randint()随机整数np.random.randint(1, 10, 5)
randn()标准正态分布np.random.randn(100)
normal()正态分布np.random.normal(0, 1, 100)
uniform()均匀分布np.random.uniform(-1, 1, 10)
choice()随机选择np.random.choice(arr, size=5)
shuffle()打乱数组np.random.shuffle(arr)
permutation()随机排列np.random.permutation(arr)
binomial()二项分布np.random.binomial(10, 0.5)
poisson()泊松分布np.random.poisson(5, 10)
exponential()指数分布np.random.exponential(1)
seed()设置种子np.random.seed(42)
http://www.dtcms.com/a/549476.html

相关文章:

  • ⸢ 拾-Ⅱ⸥⤳ 威胁感知与响应建设方案:威胁运营威胁响应
  • Auto Dark Mode,一款Windows 自动深浅色切换工具
  • 惠民县建设网站信宜网站设计公司
  • 论文对应项目复现教程
  • 第165期 无需提示词的微调:Bonepoke 与系统姿态的隐藏调控旋钮
  • 口腔种植中叠腮技术的适应证与考量
  • 原码、反码、补码与正数、负数的运算关系介绍
  • ShimetaPi丨事件相机新版SDK发布:支持Python调用,可降低使用门槛
  • 计算机图形学:【Games101】学习笔记03——光栅化(三角形的离散化、深度测试与抗锯齿)
  • 如何掌握【Java】 IO/NIO设计模式?工厂/适配器/装饰器/观察者模式全解析
  • C# 中的空条件运算符(?.)与空合并运算符(??)详解
  • 福建人力资源建设网站房地产销售技巧
  • 佳木斯 网站建设网页版qq登录入口版qq账号登录界面
  • 基于django网站开发课设报告广州开公司的基本流程及费用
  • VecDeque 的环形缓冲区:从 `head/tail` 到 `wrapping_add`,一次把缓存、SIMD 与 `no_std` 全部打通
  • EasyGBS在智慧仓储物流场景下视频实时监控系统应用方案
  • 网站建设分哪几种医院网站做竞价需要注意广告法
  • 数据分析平台:驱动智能决策的利器
  • 初识Java-7
  • 潍坊比较大的网站制作公司网站建设和网页制作
  • Postman vs Swagger vs PostIn,接口管理工具一文纵评
  • 如何使用React和Redux构建现代化Web应用程序
  • 湖北省住房和城乡建设厅网站首页wordpress自动刷新2次
  • 网站建设的设计方案和实施计划网站做优化效果怎么样
  • AWS + WordPress:中小型外贸独立站的理想组合
  • 掌控未来无线通信新时代——全面解读无线发射和接收模块的创新应用
  • 湖北洈水水利水电建设公司网站小米手机商城
  • 部署开源漏洞扫描工具SiriusScan及问题解决
  • 互联网企业外化能力与实体零售融合:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索
  • 淮安建设机械网站制作网站指向错误