其他分享
首页 > 其他分享> > numpy1.1.7版本后随机数新的生成方法总结

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

作者:互联网

文章目录

一、简介

最近在看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)

参数:

示例:

>>> 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)

参数如下:

示例:

>>> 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函数更少,个人更喜欢新版的,反正都支持,看个人习惯。

标签:随机数,Generator,random,rng,版本,numpy1.1,array,size
来源: https://blog.csdn.net/u012949658/article/details/117155881