Python 什么';s numpy.random与numpy.random.Generate之间的差异
我最近一直在尝试模拟Monte Carlos模拟,但遇到了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
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.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])