You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用带固定np.random种子的函数后全局随机数结果固定如何处理

问题根源

np.random.seed()修改的是numpy的全局随机数生成器状态,并非函数局部变量。你每次调用Number_Rand_Seed()都会把全局随机状态重置到种子300121对应的初始位置,所以后续调用全局的np.random.uniform输出结果每次都完全一致。

解决方案

给需要固定种子的函数单独创建独立的随机数生成器实例,完全和全局随机状态隔离,二者不会互相影响。
修改后的代码如下:

import numpy as np

def Number_Rand_Seed():
    # 为该函数单独创建独立随机生成器,指定固定种子,不影响全局状态
    rng = np.random.default_rng(seed=300121)
    a = rng.uniform(0, 10)
    return a

def Number_Rand():
    a = Number_Rand_Seed()
    # 此处调用全局随机生成器,状态不会被上面的函数修改,每次调用都会自动更新
    b = np.random.uniform(0, 10)
    return a, b

for i in range(3):
    print(Number_Rand()) 

修改后Number_Rand_Seed()每次返回的固定值保持不变,而全局随机生成器的状态不会被重置,b的值每次调用都会变化,完全符合预期输出效果。
如果你使用的是numpy 1.16及更早版本,也可以用RandomState实现相同效果:

def Number_Rand_Seed():
    rng = np.random.RandomState(seed=300121)
    a = rng.uniform(0, 10)
    return a

内容的提问来源于stack exchange,提问作者Tucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:00