1 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
從 NumPy 1.17 開(kāi)始,原因主要是向后兼容性。
從 NumPy 1.17 開(kāi)始,numpy.random.*
函數(shù)(包括 )是遺留函數(shù),根據(jù)NumPy 的新 RNG 政策numpy.random.choice
,“應(yīng)保持與當(dāng)前相同”,該政策還為 NumPy 引入了新的隨機(jī)生成系統(tǒng)。使它們成為遺留功能的原因包括避免全局狀態(tài)的建議。盡管如此,NumPy 并沒(méi)有在 1.17 版中棄用任何函數(shù),盡管 NumPy 的未來(lái)版本可能會(huì)棄用。numpy.random.*
回想一下,在您的示例中,numpy.random.choice
將 s 數(shù)組作為float
權(quán)重。整數(shù)權(quán)重?cái)?shù)組將導(dǎo)致更精確的隨機(jī)數(shù)生成。盡管 anyfloat
可以轉(zhuǎn)換為有理數(shù)(導(dǎo)致有理值權(quán)重,從而導(dǎo)致整數(shù)權(quán)重),但遺留的 NumPy 版本似乎不會(huì)這樣做。numpy.random.choice
在不破壞向后兼容性的情況下,無(wú)法更改這些和其他實(shí)現(xiàn)決策。
順便說(shuō)一下,算術(shù)編碼并不是唯一一種旨在避免比特浪費(fèi)的算法。也許用于離散分布采樣的規(guī)范算法是 Knuth 和 Yao 算法(1976),它根據(jù)所涉及概率的二元展開(kāi)精確地選擇一個(gè)隨機(jī)整數(shù),并將問(wèn)題視為二叉樹(shù)上的隨機(jī)游走。(該算法平均使用距理論下限最多 2 位的距離。)任何其他整數(shù)生成算法最終都可以用相同的方式描述,即二叉樹(shù)上的隨機(jī)游走。例如,快速加載的骰子滾筒是最近的一種算法,它對(duì)其使用的平均位數(shù)有一個(gè)保證范圍(在這種情況下,與理論下限相差不超過(guò) 6 位)。Han 和 Hoshi 算法(從 1997 年開(kāi)始)是另一種算法,但使用累積概率。
添加回答
舉報(bào)