我的程序检索一个适合0.0到1.0范围的长浮点数列表。但是,我需要将这些浮点数转换为适合任意给定范围的整数。它必须在转换时按比例说出。这样做最快的方法是什么?
- 该程序不是伪随机生成器
(范围包括最后一位数字,因此范围0-3
为0, 1, 2, 3
等等......)
0.230293857162
和一个范围0-3
,它应该返回int 0
0.873102005290
和一个范围0-9
,它应该返回int 8
0.596830273110
和一个范围0-1
,它应该返回int 1
对于第一个,范围0
中的0-3
相当于说浮点数0.0 <= x < 0.25
对于第二个,范围8
中的0-9
相当于说浮点数0.8 <= x < 0.9
对于第3个,范围1
中的0-1
相当于说浮点数0.5 <= x <= 1.0
答案 0 :(得分:2)
0到1范围可以被认为是百分比,因此您只需要将该数字乘以范围长度并将其添加到范围的下限。
示例:
浮点数为0.7,因此它代表70%。
范围是1到9,然后范围长度是9 - 1 = 8.
8 * 0.7 = 5.6
1是范围的下限,因此我们将1加到5.6 = 6.6
如果你截断结果,你得到一个6,如果你将它均匀地舍入,你得到一个7。
您可以通过测试限制来测试这一点:
对于0 =&gt;结果是1
对于1 =&gt;结果是9
答案 1 :(得分:0)
获得随机整数的最快方法是使用numpy:
# np.random.randint(lower_bound, upper_bound, shape)
np.random.randint(10, 20, (2, 2))
array([[14, 18],
[19, 18]])
虽然如果你想使用你已经生成的浮点数,只需使用这个简单的等式:
# random_int = int(round(random_float*range + lower_bound))
random_int = int(round(0.873102005290*9 + 0))