Python 什么';s numpy.random与numpy.random.Generate之间的差异

Python 什么';s numpy.random与numpy.random.Generate之间的差异,python,numpy,random,generator,montecarlo,Python,Numpy,Random,Generator,Montecarlo,我最近一直在尝试模拟Monte Carlos模拟,但遇到了numpy.random。在检查指数发生器的性能时,我注意到页面中有一个警告,它告诉我们 Generator.index应用于新代码 尽管如此,numpy.random.exponential仍然有效,但我无法运行生成器对应程序。我得到了以下错误: --------------------------------------------------------------------------- TypeError

我最近一直在尝试模拟Monte Carlos模拟,但遇到了
numpy.random
。在检查指数发生器的性能时,我注意到页面中有一个警告,它告诉我们

Generator.index应用于新代码

尽管如此,
numpy.random.exponential
仍然有效,但我无法运行
生成器
对应程序。我得到了以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-c4cc7e61aa98> in <module>
----> 1 np.random.Generator.exponential(2, 1000)

TypeError: descriptor 'exponential' for 'numpy.random._generator.Generator' objects doesn't apply to a 'int' object

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
---->1 np.随机指数发生器(2100)
TypeError:numpy.random.\u generator.generator对象的描述符“指数”不适用于“int”对象
我的问题是:

  • 这两个有什么区别

  • 如何使用
    生成器
    生成样本

  • 文档中提到的是一个类,在NumPy 1.17中引入:它是一个核心类,负责调整来自底层位生成器的值,以从各种分布生成样本
    numpy.random.index
    是(现在)基于Mersenne Twister的随机框架的一部分。您可能不必担心遗留函数很快就会被删除——这样做会破坏大量代码,但NumPy开发人员建议,对于新代码,您应该使用新系统,而不是遗留系统

    关于系统变更理由的最佳来源可能是NEP 19:

    要按照文档的建议使用,首先需要创建
    Generator
    类的实例。创建此类实例的最简单方法是使用函数

    因此,您希望从以下内容开始:

    >>> import numpy
    >>> my_generator = numpy.random.default_rng()
    
    此时,
    my_generator
    numpy.random.generator
    的一个实例:

    >>> type(my_generator)
    <class 'numpy.random._generator.Generator'>
    
    当然,您的
    生成器
    实例也可以用于获取所需的任何其他随机变量:

    >>> my_generator.integers(0, 100, size=3)
    array([56, 57, 10])
    

    相关:@olenscki刚刚看到你对相同数字的连续数字的评论。您确定需要多个帧吗?也许
    \begin{frame}\begin{figure}\includegraphics{example-image-a}\includegraphics{example-image-b}\caption{text}\end{figure}\end{frame}
    会更容易些?@samcarter_is_at_topanswers.xyz我正试图显示相同的图片并更改下面的文本。如果我有两个图像和一个文本,你建议的这个可能会更容易,不?@olenscki更改文本,可能
    \only{text first slide}\only{text second slide}
    更容易?(操作计数器来减少数字有点冒险,因为你会打破交叉引用)谢谢你的回答!我还有最后一个问题:他们为什么这样做?我认为NEP19解释得相当好。遗留系统对再现性做出了一些承诺,这些承诺严重制约了进一步的开发和改进。因此,在这一点上,如果你想继续在随机系统上开发,你有两个选择:违背承诺,或者创建一个新系统来替换旧系统(但保留旧系统以避免破坏现有代码)。新系统的创建提供了一些机会来做一些其他的好事,比如允许不同的核心位生成器。对现有代码进行根本性的更改是很棘手的。打碎东西很容易。从头开始开发一个新的包,并在“朋友”中测试它(作为它自己的github项目),然后在稳定后,将它移植到主流包中,这会更容易。
    >>> my_generator.integers(0, 100, size=3)
    array([56, 57, 10])