Python调用random.uniform()传low/size参数报TypeError解决方法
问题诱因
报错的核心原因是混淆了Python标准库random模块和NumPy库的随机数生成接口:
- 你当前调用的
random.uniform是Python标准库自带方法,函数签名为random.uniform(a, b),仅接收两个位置参数,返回[a,b]区间内的单个浮点数,既不支持low/high关键字传参,也没有size参数用来批量生成指定维度的随机数组,和你写的调用语法完全不匹配,所以会连续抛出参数不匹配的TypeError。 - 你代码里用到的
low、high、size传参规则,是NumPy库中numpy.random.uniform的接口定义,属于典型的导入来源错误。另外你代码中用到的dot(矩阵点乘)、exp(指数运算)也都是NumPy提供的数组运算函数,进一步说明你本来要调用的就是NumPy的随机接口。
修复方案
优先选择第一种方案,改动最小也适配你后续的神经网络计算逻辑:
- 方案1:替换导入源为NumPy的随机模块,在代码开头补充正确的导入语句即可,原有初始化逻辑完全不需要改动:
# 替换原有random导入,同时导入后续计算需要的dot、exp from numpy import random, dot, exp # 原有业务代码无需修改即可正常运行 def apply_net(y_in): global w, b z=dot(w, y_in)+b return(1/(1+exp(-z))) N0=2 N1=1 w=random.uniform(low=-10,high=+10,size=(N1,N0)) b=random.uniform(low=-1,high=+1,size=N1)
- 方案2:如果坚持使用Python标准库random,需要手动构造指定维度的随机数列表,但这种写法下后续的矩阵点乘、sigmoid计算都需要自行适配列表运算,开发成本很高,不推荐:
import random # 手动构造维度匹配的权重、偏置 w = [[random.uniform(-10, 10) for _ in range(N0)] for _ in range(N1)] b = [random.uniform(-1, 1) for _ in range(N1)]
内容的提问来源于stack exchange,提问作者ilovegilliananderson
相关产品推荐
相关产品推荐

