我在python中使用random
模块,发现该代码总是返回inf
:
import random
print(random.uniform(0, float("inf")))
我想知道为什么以及是否还有另一种方法可以使它不总是返回inf
。
答案 0 :(得分:3)
如果您调查random.uniform
的来源,将会很清楚:
def uniform(self, a, b):
"Get a random number in the range [a, b) or [a, b] depending on rounding."
return a + (b-a) * self.random()
任何使用float('inf')
的算术都将返回-inf
或inf
。
在这种情况下:
b-a
,其中b
为inf
的结果为inf
,inf * self.random()
为inf
(如果{{1 }}为负),而-inf
为self.random()
。
答案 1 :(得分:1)
我不太确定为什么您会想要一个未指定范围的随机数,但是出于实际目的,使用sys.maxsize
这样的上限可能就足够了。
答案 2 :(得分:1)
在无限范围内随机均匀地选取一个值等效于从一个无限集中随机均匀地选取一个元素。统一意味着您所有元素的选择概率为resample('1min')
resample('3min')
resample('5min')
resample('15min')
。如果base
为正,则您分布中的概率之和等于p
,它是无限的,因此不等于1。
正如在接受的答案中提到的那样,阅读代码解释了为什么此特定实现返回p
的原因,但这不是bug,这是此函数调用可以返回的唯一逻辑。但是我认为这应该引起一个错误。
请注意,您可以将随机浮点数生成(在任何时间间隔内)解释为等效于从无穷集合中选择元素,但是事实并非如此,因为我们没有使用无限精度浮点数(它们不是实数)。正是这样才能使对p*inf
的调用得到明确定义。