1 回答
TA贡献1719条经验 获得超6个赞
从 NumPy 1.17 开始,原因主要是向后兼容性。
从 NumPy 1.17 开始,numpy.random.*
函数(包括 )是遗留函数,根据NumPy 的新 RNG 政策numpy.random.choice
,“应保持与当前相同”,该政策还为 NumPy 引入了新的随机生成系统。使它们成为遗留功能的原因包括避免全局状态的建议。尽管如此,NumPy 并没有在 1.17 版中弃用任何函数,尽管 NumPy 的未来版本可能会弃用。numpy.random.*
回想一下,在您的示例中,numpy.random.choice
将 s 数组作为float
权重。整数权重数组将导致更精确的随机数生成。尽管 anyfloat
可以转换为有理数(导致有理值权重,从而导致整数权重),但遗留的 NumPy 版本似乎不会这样做。numpy.random.choice
在不破坏向后兼容性的情况下,无法更改这些和其他实现决策。
顺便说一下,算术编码并不是唯一一种旨在避免比特浪费的算法。也许用于离散分布采样的规范算法是 Knuth 和 Yao 算法(1976),它根据所涉及概率的二元展开精确地选择一个随机整数,并将问题视为二叉树上的随机游走。(该算法平均使用距理论下限最多 2 位的距离。)任何其他整数生成算法最终都可以用相同的方式描述,即二叉树上的随机游走。例如,快速加载的骰子滚筒是最近的一种算法,它对其使用的平均位数有一个保证范围(在这种情况下,与理论下限相差不超过 6 位)。Han 和 Hoshi 算法(从 1997 年开始)是另一种算法,但使用累积概率。
添加回答
举报