如果U是均匀分布在[0, 1]上的随机变量,那么(r1 - r2) * U + r2均匀分布在[r1, r2]上。
因此,您只需要:
(r1 - r2) * torch.rand(a, b) + r2
或者,您可以简单地使用:
torch.FloatTensor(a, b).uniform_(r1, r2)
为了充分解释这个公式,让我们看一些具体的数字:
r1 = 2 # Create uniform random numbers in half-open interval [2.0, 5.0)
r2 = 5
a = 1 # Create tensor shape 1 x 7
b = 7
我们可以将表达式(r1 - r2) * torch.rand(a, b) + r2分解如下:
-
torch.rand(a, b) 产生一个 a x b (1x7) 张量,其数字均匀分布在 [0.0, 1.0) 范围内。
x = torch.rand(a, b)
print(x)
# tensor([[0.5671, 0.9814, 0.8324, 0.0241, 0.2072, 0.6192, 0.4704]])
-
(r1 - r2) * torch.rand(a, b) 产生分布在统一范围 [0.0, -3.0) 内的数字
print((r1 - r2) * x)
tensor([[-1.7014, -2.9441, -2.4972, -0.0722, -0.6216, -1.8577, -1.4112]])
-
(r1 - r2) * torch.rand(a, b) + r2 产生统一范围内的数字 [5.0, 2.0)
print((r1 - r2) * x + r2)
tensor([[3.2986, 2.0559, 2.5028, 4.9278, 4.3784, 3.1423, 3.5888]])
现在,让我们分解@Jonasson 建议的答案:(r2 - r1) * torch.rand(a, b) + r1
- 同样,
torch.rand(a, b) 生成 (1x7) 个数字,均匀分布在 [0.0, 1.0) 范围内。
x = torch.rand(a, b)
print(x)
# tensor([[0.5671, 0.9814, 0.8324, 0.0241, 0.2072, 0.6192, 0.4704]])
-
(r2 - r1) * torch.rand(a, b) 产生均匀分布在 [0.0, 3.0) 范围内的数字。
print((r2 - r1) * x)
# tensor([[1.7014, 2.9441, 2.4972, 0.0722, 0.6216, 1.8577, 1.4112]])
-
(r2 - r1) * torch.rand(a, b) + r1 产生均匀分布在 [2.0, 5.0) 范围内的数字
print((r2 - r1) * x + r1)
tensor([[3.7014, 4.9441, 4.4972, 2.0722, 2.6216, 3.8577, 3.4112]])
总结,(r1 - r2) * torch.rand(a, b) + r2 产生范围 [r2, r1) 内的数字,而 (r2 - r1) * torch.rand(a, b) + r1 产生范围 [r1, r2) 内的数字。