Numpy教程:Numpy.random模块使用(新)

本文介绍了Numpy1.22版本中的随机数生成器Generator,对比了旧版的RandomState。通过创建指定维度数组、生成随机整数、随机选择和排列等操作,详细阐述了Generator的使用方法,并提及了各种随机分布函数。此外,还讨论了shuffle()和permutation()的区别。
摘要由CSDN通过智能技术生成

前言

本文介绍版本:Numpy1.22

在numpy1.17开始,Generator代替RandomState,但是网上的博客多比较老,还都是介绍的RandomState,写这篇文章介绍一下新的numpy.random的基本使用。以下展示的是新版Generator和旧版RandomState的比较:
在这里插入图片描述

numpy.random官方文档:numpy.random


创建

随机数的产生需要先创建一个随机数生成器(Random Number Generator)
然后可以使用生成器(Generator)的函数方法创建。

使用random()函数返回一个在0~1的随机浮点值:

import numpy as np
rng = np.random.default_rng(123)# 创建一个种子为123的生成器,可以为空,空时会随机分配一个种子。
print(rng)
# Generator(PCG64)

rfloat = rng.random()
print(rfloat)
# 0.6823518632481435

使用

在使用时创建好上述的rng

1、创建指定维度数组

想创建指定维度的数组,可以向random()函数传入元组,其值等于你想要的shape。返回的值依旧是0~1的浮点值,

ndarr=rng.random((3,2))
ndarr
'''
array([[0.68235186, 0.05382102],
       [0.22035987, 0.18437181],
       [0.1759059 , 0.81209451]])
      '''

ndarr.shape
# (3, 2)

2、创建随机一维整数

rints = rng.integers(low=0, high=10, size=3)
print(rints)
# array([6, 2, 7])

integers(low[, high, size, dtype, endpoint])
返回从low(包括)到high(不包括)的随机整数,或者如果endpoint=True,则返回low(包括)到high(包括)的随机整数。

3、随机选择

rng.choice([[0, 1, 2], [3, 4, 5], [6, 7, 8]], 2)
'''
array([[3, 4, 5], 
       [0, 1, 2]])
'''

choice(a[, size, replace, p, axis, shuffle])
从给定数组生成随机样本
注意a可以为整型,也可以是ndarray,list,tuple

4、随机排列

想打乱数组,numpy有两个函数可以做到,一个是shuffle(),另一个是permutation()

shuffle()和permutation()的区别:
 
shuffle()会改变输入的数组;输入的参数可以是array,list等序列,但是不能是int。
permutation()不会改变输入的数组,会返回一个数组的copy;输入的参数可以是int,numpy会自动将int用arange()转换。

arr = np.arange(10)
rng.shuffle(arr)
arr
[5, 3, 4, 1, 9, 8, 2, 7, 0, 6] # random
rng.permutation(10)
# array([5, 3, 4, 1, 9, 8, 2, 7, 0, 6])

shuffle(x[, axis])
通过变换数组或序列的内容修改原有数组或序列。

permutation(x[, axis])
随机置换一个序列,或者返回一个置换后的范围。


分布

函数解释
beta(a, b[, size])从 Beta 分布中抽取样本。
binomial(n, p[, size])从二项分布中抽取样本。
exponential([scale, size])从指数分布中抽取样本。
geometric(p[, size])从几何分布中抽取样本
logistic([loc, scale, size])从逻辑分布中抽取样本。
normal([loc, scale, size])从正态(高斯)分布中抽取随机样本。
standard_normal([size, dtype, out])从标准正态分布(平均值=0,标准差=1)中抽取样本。
AttributeError: 'numpy.random._generator.Generator' object has no attribute 'random_sample' 表示在使用numpy.random模块的Generator对象时发生了错误,错误提示该对象没有random_sample属性。为了解决这个问题,可以尝试以下方法: 1. 确保你的numpy版本是最的,可以通过升级numpy来解决这个问题。你可以使用以下命令升级numpy: ``` pip install --upgrade numpy ``` 2. 如果升级numpy后仍然出现相同的错误,那么可能是你的代码中使用了不兼容的numpy版本。你可以尝试使用conda来管理你的python环境,并创建一个的环境来运行你的代码。具体步骤如下: - 安装conda:请根据你的操作系统下载并安装Miniconda或Anaconda。 - 创建一个的环境:在终端或命令提示符下运行以下命令创建一个的conda环境: ``` conda create --name myenv python=3.7 ``` - 激活的环境:运行以下命令激活创建的环境: - 对于Windows用户: ``` conda activate myenv ``` - 对于Linux和Mac用户: ``` source activate myenv ``` - 安装所需的依赖项:在激活的环境中使用pip安装所需的依赖项,包括numpy和其他需要的库: ``` pip install numpy ``` - 运行你的代码:在激活的环境中运行你的代码,看看问题是否得到解决。 3. 如果以上方法仍然无法解决问题,请检查你的代码是否有其他地方导入了numpy.random模块,可能导致命名冲突。你可以尝试在代码中将该模块的导入语句修改为具体的函数导入,例如: ``` from numpy.random import randint, random_sample ``` 然后使用randint()和random_sample()函数来替代你原来的代码中的相应属性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值