numpy1.1.7版本后随机数新的生成方法总结

2024-08-22 17:58

本文主要是介绍numpy1.1.7版本后随机数新的生成方法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、简介
      • 二、Generator
        • 1、常用函数
        • 2、示例
          • 2.1 产生随机整数
          • 2.2 产生随机数
          • 2.3 在已有的一维数组里面挑选随机数
        • 3、seed
      • 三、RandomState
      • 四、使用体验

一、简介

最近在看numpy官网的时候,发现1.17版本对随机数做了部分改动。官网地址:Random sampling (numpy.random)

改动如下:
在这里插入图片描述
numpy新版本保持了RandomState的兼容,新的Generator相比于RandomState能力更强大。

在这里插入图片描述
所以有时候我们去网上找博客,不一定能获得最新的内容。

二、Generator

官网地址:Random Generator

我一开始去官网找的时候,也是再三确认,有新的方法了

1、常用函数

Generator常用的产生随机数的函数如下:
在这里插入图片描述

2、示例

常用的是前三个,我们一个一个说过去。

2.1 产生随机整数
random.Generator.integers(low, high=None, size=None, dtype=np.int64, endpoint=False)

参数:

  • low:int or array-like of ints,确定随机数的下限,必须给出;如果high没有指定,假如参数是low=3,那么就把3赋值给high,随机数在[0,3)里面选;如果只有一个参数,且给出的时候没有指定给哪low还是high,则默认给high,并且此时low默认为0;
  • high:int or array-like of ints, optional,确定随机数的上限;
  • size:int or tuple of ints, optional,确定返回的矩阵大小,可以是一维,也可以是多维;
  • dtype:dtype, optional,确定整数类型;
  • endpoint:bool, optional,确定上下限是否包含high,默认是不包含;

示例:

>>> import numpy as np
#初始化Generator
>>> rng=np.random.default_rng()
>>> rng.integers(low=-2,high=2,size=(2,3),endpoint=True)
array([[ 1,  0,  0],[ 1,  2, -1]])
>>> rng.integers(low=3,size=5)
array([0, 1, 2, 0, 0])
>>> rng.integers(3,size=(2,3))
array([[2, 0, 1],[1, 1, 2]])
>>> rng.integers(low=3)
0
>>> rng.integers(low=3)
2
#high是数组的情况,返回值是一个有不同上限的1*3的矩阵,
>>> rng.integers(1,[3,5,10])
array([1, 2, 8])
#low是数组的情况,指定下限
>>> rng.integers([3,5,10],11)
array([ 3, 10, 10])
>>> 
2.2 产生随机数
random.Generator.random(size=None, dtype=np.float64, out=None)

参数比较少,size和dtype不再赘述,out用于指定存放结果的数组。random只能产生[0,1)之间的随机数,其它范围的得利用加减乘除等运算得到想要的结果了。

比如,想要[a,b)之间的随机数,可以如下操作:

(b - a) * random() + a

示例:

#产生[0,1)之间的随机数
>>> rng.random(size=4)
array([0.98110911, 0.18213644, 0.41812857, 0.19352714])
#产生[0,5)之间的随机数
>>> 5*rng.random(size=4)
array([1.07804164, 3.67840157, 3.8162768 , 2.13327948])
>>> 
2.3 在已有的一维数组里面挑选随机数
random.Generator.choice(a, size=None, replace=True, p=None, axis=0, shuffle=True)

参数如下:

  • a:{array_like, int},如果是数组(不仅限于一维数组),就在数组元素里面选;如果是int整数,就在np.arange(a)产生的数组里面选;
  • replace:bool, optional,是不是有放回采样,即产生的数组里面是不是有重复值;True表示有重复值,False表示没有重复值;
  • p:1-D array_like, optional,a中每个值被选上的可能性;如果没有给出,默认是均匀分布;
  • asix:int, optional,这个主要是针对a的,如果a是多维数组,选定在哪个维度上选取元素,假如a是2*4矩阵,axis=0表示每一行作为被挑选的元素;axis=1表示每一列作为被挑选的元素;
  • shuffle:bool, optional,如果是无放回抽样,是否打乱顺序。

示例:

>>> rng.choice(25,size=(2,4),replace=True)
array([[ 0, 11, 18, 11],[ 3, 18, 20, 22]])
>>> rng.choice(25,size=(2,4),replace=False)
array([[ 1, 14,  7, 23],[20,  9,  6, 19]])
>>> 

关于概率p,之前在一篇博客中,看到过这么一个应用,用choice实现了类似轮盘赌的效果,在遗传算法里面需要根据适应度选择交叉和变异的双亲节点,轮盘赌就是想实现适应度越高,被选上的可能性越大,choice函数中的p参数刚好符合。

简单实例:

>>> fitness=rng.random(size=6)
#适应度
>>> fitness
array([0.31172348, 0.21873388, 0.38370583, 0.29026004, 0.39245999,0.33158675])
>>> p=fitness/fitness.sum()
>>> p
array([0.1616429 , 0.11342354, 0.19896904, 0.15051312, 0.20350848,0.17194292])
>>> result=rng.choice(a=6,size=4,replace=False)
#result保存的是下标
>>> result
array([2, 4, 5, 3])
>>> 
3、seed

和RandomState一样,seed是用于产生相同的随机数,在Generator中需要实例化的时候就指定,暂时还没遇到这种情境下的应用。

代码:

>>> rng=np.random.default_rng(seed=10)
>>> rng.random()
0.9560017096289753
>>> rng=np.random.default_rng(seed=10)
>>> rng.random()
0.9560017096289753
>>> 

三、RandomState

这是RandomState和Generator两个类下的常用函数对比

在这里插入图片描述
RandomState官网介绍:Legacy Random Generation

这是常用的几个函数:
在这里插入图片描述
用法与Generator这个类差不多,要是觉得英文的不想看,也可以看看这篇博客Python的numpy库中rand(),randn(),randint(),random_integers()等random系函数的使用

四、使用体验

Generator函数更少,个人更喜欢新版的,反正都支持,看个人习惯。

这篇关于numpy1.1.7版本后随机数新的生成方法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096988

相关文章

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装