numpy.random.uniform double 的有效范围

问题描述 投票:0回答:1

numpy.random.uniform
返回指定下限和上限之间的双精度值。

我可以使用

np.finfo(np.double)
来获取最小和最大可表示数字,但如果我在
numpy.random.uniform
中使用这些值,则会收到错误。

import numpy as np
info = np.finfo(np.double)
np.random.uniform(low=info.min, high=info.max)

OverflowError:范围超出有效范围

有人可以阐明这里出了什么问题吗?

low
high
的实际支持限制是多少?

我尝试获取双精度数的边界并将它们输入到用于生成双精度数的 rng 中,我希望它们是兼容的。

将界限减半确实有效:

np.random.uniform(low=info.min/2, high=info.max/2)

因此,这表明

uniform
实际上无法生成任何 double,或者
finfo
返回的边界不包含在内。

python numpy uniform
1个回答
0
投票

uniform
实际上执行
low + (high-low) * np.random.random()

但是

high - low
是不可能的:

info.max-info.min

# RuntimeWarning: overflow encountered in scalar subtract info.max-info.min

您发现了制服的局限性。低和高之间的差异不应超过

abs(info.max)

np.random.uniform(low=0, high=info.max)            # valid
np.random.uniform(low=info.min, high=0)            # valid
np.random.uniform(low=info.min/2, high=info.max/2) # valid
© www.soinside.com 2019 - 2024. All rights reserved.