Python中为randn()传递随机种子生成器的问题:使用np.random.default_rng生成器调用randn()无效
解决numpy新随机生成器中randn()无法调用的问题
嘿,我懂你碰到的这个小坑!numpy的新随机生成器API(也就是np.random.default_rng()创建的实例)和旧的全局随机函数确实有不少方法名的差异,randn()就是其中一个容易踩的点~
问题原因
旧的全局np.random.randn()是生成**标准正态分布(均值0,方差1)**样本的快捷方法,但在新的Generator类(default_rng()返回的对象)里,这个方法名被替换成了更明确的命名,所以直接调用rng.randn()会报错。
两种替代方案
你可以用以下两种方法实现和randn()完全一样的效果:
1. 使用standard_normal()方法
这个方法就是专门生成标准正态分布样本的,参数和randn()类似,只需要指定size即可:
import numpy as np rng = np.random.default_rng(1234) # 生成10个标准正态分布样本,等价于旧的np.random.randn(10) x = rng.standard_normal(size=10)
2. 使用normal()方法指定参数
randn()本质上是normal(loc=0, scale=1)的特例,所以你也可以直接调用normal()并传入对应的均值和方差参数,这种方式更灵活,还能按需调整分布参数:
import numpy as np rng = np.random.default_rng(1234) # 同样生成10个标准正态分布样本 x = rng.normal(loc=0.0, scale=1.0, size=10) # 如果需要生成其他正态分布,比如均值2、方差3,直接改参数就行 y = rng.normal(loc=2.0, scale=3.0, size=10)
额外小提示
新的Generator API还重构了其他旧方法的命名,比如:
- 旧的
np.random.rand()→ 新的rng.uniform()(或者rng.random()) - 旧的
np.random.randint()→ 新的rng.integers()
这些命名更贴合数学定义,也让API风格更统一,用习惯了会觉得更顺手~
内容的提问来源于stack exchange,提问作者Euler_Salter
相关产品推荐
相关产品推荐

