mti*_*ger 2 python random numpy
我想生成0到0.5之间均匀分布的随机数,但是截断到2个小数位.
没有截断,我知道这是通过
import numpy as np
rs = np.random.RandomState(123456)
set = rs.uniform(size=(50,1))*0.5
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我提出如何生成高达2 dp的随机数的建议吗?谢谢!
A float不能被截断(或舍入)为2个十进制数字,因为有许多带有2个十进制数字的值,它们不能完全表示为IEEE双精度数.
如果你真的想要你想要的东西,你需要使用精确精确的类型,比如Decimal.
当然,这样做有一些缺点 - 对于numpy用户来说最明显的一个是你必须使用的dtype=object,具有所有的紧凑性和性能影响.
但这是实际做你要求的唯一方法.
最有可能的是,你真正想要做的就是Joran Beasley的答案(让它们不被截断,只是在打印输出时完成)或类似于Lauritz V. Thaulow的答案(得到最接近的近似值,然后使用显式epsilon检查到处).
或者,您可以进行隐式定点运算,正如David Heffernan在评论中建议的:生成0到50之间的随机整数,将它们保持为整数numpy,并将它们格式化为定点小数和/或Decimal在必要时转换为(例如,用于打印结果).这为您提供了Decimal无需成本的所有优势......虽然它确实打开了一个明显的窗口,通过忘记在某处移动2个位置来创建新的错误.