首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -如何生成不受上界限制的随机自然数

Python -如何生成不受上界限制的随机自然数
EN

Stack Overflow用户
提问于 2022-09-12 10:33:09
回答 3查看 140关注 0票数 -1

我想要生成没有上限的随机自然数。

例如,我可以使用random.randint(1, 1000)生成随机自然数,但我不想指定上限。我怎样才能做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2022-09-12 11:15:52

这里的主要问题甚至不是计算机能够保留的最大整数(包括在产生如此大的随机数时暂时保持的整数)。假设PO在获得非常大的数字时同意牺牲精度,并同意将它们保留为float

这里的根本问题实际上是这个自然数的分布。random.randint(1, 1000)均匀分布返回一个随机整数。如果没有上界,这种分布是不存在的,因为概率质量函数 (pmf)只返回零。从-∞到+∞的pmf积分必须等于1,这在没有上界的均匀分布下是不可能的,因为它不能在右边收敛。

然而,自然数的其他离散分布,虽然不限于右边,但整数越大,其概率就越小。但是,在Python中生成它们的包通常使用numpy数据类型(非常有限,比如C,与常规Python和Wolfram不同的是整数大小),因此在Python中还是有一个固有的绑定。

代码语言:javascript
复制
from scipy.stats import nbinom
print(nbinom.rvs(1e10, 0.5, size=1) + 1)

我们可以尝试用正则Python编写一个数值算法来生成这个负二项式+1随机变量,由连续均匀分布产生的随机数从0.0到1.0,每次计算前者的pmf在正则Python中的积分(并将其转换为分位数函数),但效率会很低。

票数 1
EN

Stack Overflow用户

发布于 2022-09-12 10:37:47

不可能从0到无穷远选择一个数字。但是,您可以使用sys.maxsize作为上限,这是支持的最大数目。不要忘记导入sys模块。

import sys

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 11:03:53

如果我们注意到p( n )画n的概率,即使p(n)不可能降到0,p(n)级数仍然是收敛的,其和等于1,所以p(n)必须下降得足够快。

一种可能性是采用指数分布。分布的参数决定了随机数的有限平均值。

简单地说,这个发行版返回一个浮点数,所以我们必须使用int()转换函数。

就像这样,目标是20的平均值:

代码语言:javascript
复制
$ python3
Python 3.10.6 (main, Aug  2 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)] on linux
...
>>> 
>>> import numpy as np
>>> 
>>> ys = list(map(int, np.random.exponential(20, 10)))
>>> 
>>> ys
[7, 5, 36, 4, 10, 3, 26, 45, 9, 17]
>>> 
>>> ys2 = list(map(int, np.random.exponential(20, 100)))
>>> 
>>> sum(ys2) / len(ys2)
18.89
>>> 
>>> ys4 = list(map(int, np.random.exponential(20, 10000)))
>>> 
>>> sum(ys4) / len(ys4)
19.5025
>>> 
>>> min(ys4)
0
>>> max(ys4)
207
>>> 
>>> quit()
$ 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73687905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档