Python 中的全范围随机数
Full-range random number in Python
我正在使用这条线生成一系列随机浮点数:
random.random()*(maxval-minval) + minval
我用它来为给定变量添加变量噪声,添加的噪声量取决于一系列因素。在某些情况下,噪声应该如此之高以至于实际上原始值丢失了,我有一个完全随机的值。
在这种情况下,代码适用于有限值,但如果我使用 "inf" 它 returns NaN。是否有解决方法允许可能包括无穷大的连续随机范围?我不想篡改 os.random()
,因为它是特定于机器的。
如果您在无限域上定义均匀随机分布,则域中任何值被选中的概率都是无穷小。您要求的内容没有任何数学意义。
经过评论中的讨论,我提出以下建议:
>>> m=sys.maxint
>>> np.random.uniform(-m,m,5)
array([ -5.32362215e+18, -2.90131323e+18, 5.14492175e+18,
-5.64238742e+18, -3.49640768e+18])
如前所述,您可以使用 sys.maxint
获得最大整数,然后您可以使用 np.random.randint
获得介于 maxint
和 -maxint
之间的随机数。
正如@Asad 所说,您尝试的方法在数学上不太合理。但是你可以做的是:
定义一个非常大的数字(也许这个post有帮助:What is the range of values a float can have in Python?)
根据需要使用random.uniform(0, biggestValue)作为随机值的近似值。
也许这就是您要找的。
如前所述,你不能在整条实线上均匀分布,但你可以使用其他支持实线的随机分布。考虑柯西分布。它有 'heavy-tails',这只是意味着有很大的概率得到非常大的数字。
我正在使用这条线生成一系列随机浮点数:
random.random()*(maxval-minval) + minval
我用它来为给定变量添加变量噪声,添加的噪声量取决于一系列因素。在某些情况下,噪声应该如此之高以至于实际上原始值丢失了,我有一个完全随机的值。
在这种情况下,代码适用于有限值,但如果我使用 "inf" 它 returns NaN。是否有解决方法允许可能包括无穷大的连续随机范围?我不想篡改 os.random()
,因为它是特定于机器的。
如果您在无限域上定义均匀随机分布,则域中任何值被选中的概率都是无穷小。您要求的内容没有任何数学意义。
经过评论中的讨论,我提出以下建议:
>>> m=sys.maxint
>>> np.random.uniform(-m,m,5)
array([ -5.32362215e+18, -2.90131323e+18, 5.14492175e+18,
-5.64238742e+18, -3.49640768e+18])
如前所述,您可以使用 sys.maxint
获得最大整数,然后您可以使用 np.random.randint
获得介于 maxint
和 -maxint
之间的随机数。
正如@Asad 所说,您尝试的方法在数学上不太合理。但是你可以做的是:
定义一个非常大的数字(也许这个post有帮助:What is the range of values a float can have in Python?)
根据需要使用random.uniform(0, biggestValue)作为随机值的近似值。
也许这就是您要找的。
如前所述,你不能在整条实线上均匀分布,但你可以使用其他支持实线的随机分布。考虑柯西分布。它有 'heavy-tails',这只是意味着有很大的概率得到非常大的数字。