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
返回的边界不包含在内。
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