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 年開始)是另一種算法,但使用累積概率。
添加回答
舉報