numpy是Python中经常要使用的一个库,而其中的random模块经常用来生成一些数组,本文接下来将介绍numpy中random模块的一些使用方法。

首先查看numpy的版本:

import numpy
numpy.__version__

'1.18.2'

numpy获得随机数有两种方式:

  • 结合BitGenerator生成伪随机数
  • 结合Generate从一些统计分布中采样生成伪随机数

BitGenerator:生成随机数的对象。包含32或64位序列的无符号整数

Generator:将从BitGenerator生成的随机数序列转换为遵从特定概率分布(均匀、正态或二项式等)的数字序列的对象。

从Numpy版本1.17.0开始,可以使用许多不同的BitGenerators初始化Generator。 它包含了许多不同的概率分布。 传统的RandomState随机数例程仍然可用,但仅限于单个BitGenerator。为了方便和向后兼容,单个RandomState实例的方法被导入到numpy.random命名空间。

默认情况下,Generator使用PCG64提供的位,该位具有比RandomState中的传统mt19937随机数生成器更好的统计属性。

使用旧的numpy.random.RandomState

from numpy import random
random.standard_normal()

结果:1.3768264062478266

Generator可以替代RandomState。 现在,两个类实例都拥有一个内部BitGenerator实例来提供位流,可以通过gen.bit_generator对其进行访问。 某些过期的API清除意味着已从Generator中删除了旧方法和兼容性方法。

# As replacement for RandomState(); default_rng() instantiates Generator with
# the default PCG64 BitGenerator.
from numpy.random import default_rng
rg = default_rng()
rg.standard_normal()
rg.bit_generator

<numpy.random._pcg64.PCG64 at 0x7f6f87dac270>

以下这种方式可以支持RandomState和Generator,但是它们的接口有很大的不同:

try:
rg_integers = rg.integers
except AttributeError:
rg_integers = rg.randint
a = rg_integers(1000)

结果:775

种子可以传递给任何BitGenerator。 提供的值通过SeedSequence进行混合,以将可能的种子序列分布在BitGenerator的更广泛的初始化状态中。 这里使用PCG64,并用Generator包裹。

from numpy.random import Generator, PCG64
rg = Generator(PCG64(12345))
rg.standard_normal()

结果:-1.4238250364546312

新的基础结构采用了不同的方法来从RandomState对象生成随机数。 随机数生成分为两个部分,即位生成器和随机生成器。 BitGenerator的职责有限。 它管理状态并提供产生随机双精度数和随机无符号32位和64位值的功能。随机生成器采用生成器提供的流并将其转换成更有用的分布,例如模拟的正常随机值。 这种结构允许使用很少的代码重复来使用替代位生成器。 Generator是面向用户的对象,几乎与RandomState相同。 初始化生成器的规范方法将PCG64位生成器作为唯一参数。

from numpy.random import default_rng
rg = default_rng(12345)
rg.random()

结果:0.22733602246716966

也可以直接使用BitGenerator实例实例化Generator。 要使用较旧的MT19937算法,可以直接实例化并将其传递给Generator

from numpy.random import Generator, MT19937
rg = Generator(MT19937(12345))
rg.random()

结果:0.37786929937474845

警告:生成器不再提供用于生成NumPy标准的Box-Muller方法。 使用Generator不能为正态分布或任何其他依赖于正态的分布(例如RandomState.gamma RandomState.standard_t)确切的随机值。 如果需要按位向后兼容流,请使用RandomState。

  • Generator的常规,指数和伽马函数使用256步Ziggurat方法,比NumPy的Box-Muller或逆CDF实现快2-10倍。
  • 可选的dtype参数,它接受np.float32或np.float64来为选择分布产生统一的单或双精度的随机变量
  • 可选的out参数,允许为选择分布填充现有阵列
  • random_entropy提供对密码应用程序中使用的系统随机性源的访问(例如Unix上的/ dev / urandom)。
  • 所有BitGenerator都可以通过CType(ctype)和CFFI(cffi)生成double,uint64和uint32。这允许在numba中使用位生成器。
  • 位生成器可通过Cython用于下游项目。
  • 整数现在是从离散均匀分布中生成整数随机数的规范方法。 rand和randn方法仅可通过旧版RandomState使用。端点关键字可用于指定打开或关闭间隔。这将替换randint和已弃用的random_integers。
  • random现在是生成浮点随机数的规范方法,它取代了RandomState.random_sample,RandomState.sample和RandomState.ranf。这与Python的随机性是一致的。
  • numpy中的所有BitGenerator都使用SeedSequence将种子转换为初始化状态。

Generator可以访问广泛的发行版,并替代RandomState。 两者之间的主要区别在于Generator依赖于附加的BitGenerator来管理状态并生成随机位,然后将这些随机位从有用的分布转换为随机值。 Generator使用的默认BitGenerator为PCG64。 可以通过将实例化的BitGenerator传递给Generator来更改BitGenerator。

也就是说,设置了:

np.random.default_rng(PCG64(随机种子))

在生成随机数的时候都会是相同的。然后替换掉了原来的RandomState(随机种子)

如果省略seed或None,则每次都会实例化一个新的BitGenerator和Generator。 此功能不管理默认的全局实例。

Generator的一些方法:

Generator.integers(low, high=None, size=None, dtype=’int64’, endpoint=False)

例如:

rng = np.random.default_rng(PCG64(12345))
rng.integers(2, size=10)

结果:array([1, 0, 1, 0, 0, 1, 1, 1, 1, 0])

这里的意思是生成10个数,这是个数的取值范围在0-2之间,不包括2.

再看些例子:

rng.integers(5, size=(2, 4))

结果:array([[4, 3, 4, 0], [4, 0, 2, 1]])

rng.integers(1, [3, 5, 10])

结果:array([1, 3, 3])

这里的意思是生成1×3的数组,并且每一位都限制了取值范围。

rng.integers([1, 5, 7], 10)

结果:array([6, 6, 7])

rng.integers([1, 3, 5, 7], [[10], [20]], dtype=np.uint8)

结果:array([[ 1, 4, 8, 9], [ 5, 18, 16, 12]], dtype=uint8)

这里使用了广播机制。

Generator.random(size=None, dtype=’d’, out=None):

在半开区间[0.0,1.0)中返回随机浮点数。
结果来自指定时间间隔内的“连续均匀”分布。 要对

【numpy】新版本中numpy(numpy>1.17.0)中的random模块的更多相关文章

  1. Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过nu ...

  2. Python中的numpy模块解析

    numpy 1.  创建对象 维度(dimensions):轴 轴的个数:秩(rank) Numpy最重要的一个特点就是其N维数组对象(即ndarray) 创建数组最简单的函数就是用array函数: ...

  3. Python中的numpy函数的使用ones,zeros,eye

    在看别人写的代码时,看到的不知道的函数,就在这里记下来. 原文是这样用的: weights = ones((numfeatures,1)) 在python中help(): import numpy a ...

  4. 关于在PyCharm中import numpy 出现from . import _mklinit ImportError: DLL load failed: 找不到指定模块

    最近因为一些原因安装了Anaconda3并且重新配置Python环境,但是遇到了一些麻烦的事情. 首先就是在Anaconda已经装好numpy和mkl的情况下,在PyCharm中import nump ...

  5. Python中 list, numpy.array, torch.Tensor 格式相互转化

    1.1 list 转 numpy ndarray = np.array(list) 1.2 numpy 转 list list = ndarray.tolist() 2.1 list 转 torch. ...

  6. 在virtualenv中安装NumPy、 SciPy、 scikit-learn、 matplotlib

    首先要进入对应的虚拟环境 然后安装包    这里把安装源改成使用豆瓣的源进行下载  这样的话 下载速度会快很多   安装numpy包 pip install numpy -i https://pypi ...

  7. python中numpy的random模块

    1. rand(d0,d1,.....,dn)产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状    例如:np.random.rand(3,2)则产生 3×2的数组,里面的数是0-1 ...

  8. numpy.random模块常用函数解析

    numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...

  9. numpy的random模块

    随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14 ...

随机推荐

  1. Linux安装Elasticsearch7.x

    Elasticsearch下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x8 ...

  2. 题解 UVA12186 【工人的请愿书 Another Crisis】

    俺太难了 记录一下我调了一个小时的错误 多测不清空 多测清空只清空了\(vector\) 多测全清空了,但是忘了清空\(vector[0]\) \(priority\)_ \(queue\)把\(gr ...

  3. linux相关的帮助文档

    几乎所有linux发行版都会提供大量的有用的文档. 手册页 linux发行版包含了有关常用命令.系统调用和库函数的手册页.手册页被分成不同的章节并分别标以序号: Section      名称     ...

  4. 源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)

    要实现限流.熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息.例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑 ...

  5. docker系列详解<一>之docker安装

    1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 $ ...

  6. JAVA用geotools读取shape格式文件

    Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性.但这种格式没法存储地理数据的拓扑信息. 其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是". ...

  7. 【原创】(六)Linux进程调度-实时调度器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  8. python爬虫常用库和安装 -- windows7环境

    1:urllib  python自带 2:re      python自带 3:requests     pip install requests 4:selenium      需要依赖chrome ...

  9. 洛谷1880 区间dp+记忆化搜索 合并石子

    题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ...

  10. 第三周java实验报告

        实验三 Java基本程序设计(2) 实验时间 2018-9-13 第一部分:理论知识回顾 第一章 再次了解了java“白皮书”的关键术语,java的常见术语,对于大多数“白皮书”的关键术语依然 ...