如何让scipy.stats.truncnorm.rvs使用numpy.random.default_rng()?
问题根因
你遇到的报错是新旧版本NumPy随机数接口不兼容导致的:
- NumPy 1.17之后推出的新随机数生成器
Generator(也就是default_rng()返回的对象)接口和老版本的RandomState不同:老接口生成均匀随机数的方法叫random_sample,而新Generator对应的方法叫random。 - 你使用的SciPy 1.5.0版本中,
truncnorm.rvs的内部实现还没有适配新的Generator接口,仍然调用random_sample方法,所以触发属性不存在的报错;而norm.rvs在该版本已经完成了新接口适配,因此运行正常。
解决方法
方案1:兼容当前版本,换用老版随机生成器
不用升级依赖,直接把随机生成器替换为老版RandomState即可,示例代码如下:
from scipy.stats import truncnorm import numpy as np rg = np.random.RandomState(12345) res = truncnorm.rvs(0.0,1.0,size=10, random_state=rg)
方案2:升级SciPy版本
将SciPy升级到1.7.0及以上版本,该版本及后续的SciPy已经完成了全部分布对新Generator接口的适配,你原来的代码可以直接正常运行。
内容的提问来源于stack exchange,提问作者Prasad Kasibhatla
相关产品推荐
相关产品推荐

