使用numpy绘制从均匀分布获得的[0, 1]浮点数
我现在想从一个均匀分布中生成浮点数。
Numpy库提供了一个叫做numpy.random.uniform的功能。
import numpy as np
sample = np.random.uniform (0, 1, size = (N,) + (2,) + (2,) * K)
不过,这个功能生成的值是在半开区间[0, 1)内,也就是说0是包含的,但1是不包含的。
我该怎么做才能从均匀分布中生成包含0和1的浮点数呢?
谢谢。
4 个回答
2
根据标准Python的random.uniform文档:
结束值b是否包含在范围内,取决于在计算a + (b-a) * random()时的浮点数舍入方式。
简单来说,结束值是否算在内完全看你使用的浮点数舍入规则。因此,如果你想要包含1.0这个值,你需要先确定你的操作需要多精确,然后再相应地对随机数进行舍入。如果你没有明确的精度要求,可以使用numpy.nextafter。这个用法在之前的回答中有介绍。
4
random_integers 这个函数可以生成一个闭区间内的整数。也就是说,如果你能把你实际遇到的问题转化为使用整数来解决,那就没问题了。否则,你可以考虑一下,1./MAX_INT 这样的细分程度是否足够满足你的需求。
11
无论你是从(0,1)、[0,1]、[0,1)还是(0,1]中随机抽取均匀分布的数字,其实都没关系。因为得到0或1的概率都是零。