Python梯度计算异常:输出函数对象而非梯度值求助
解决Python梯度计算函数的输出问题
原代码存在三个关键问题,导致输出的是函数对象而非计算结果:
- 函数内部直接给参数
y1、y2、x1、x2赋值,覆盖了调用时可能传入的参数,完全失去了函数的通用性 - 函数没有用
return语句返回计算好的梯度值 - 最后打印的是函数本身
gradient,而非调用函数得到的计算结果
修正方案1:保留通用函数(推荐)
如果以后需要计算不同点的梯度,建议用这个版本,函数可以复用:
# 定义梯度计算函数 def gradient(y1, y2, x1, x2): # 使用传入的参数计算,不覆盖参数值 return (y1 - y2) / (x2 - x1) # 定义需要计算的具体数值 y1 = 1.07 y2 = 1.39 x1 = 283 x2 = 373 # 调用函数获取结果并打印 calc_gradient = gradient(y1, y2, x1, x2) print('The gradient of this graph is', calc_gradient)
运行后会输出正确的梯度值:The gradient of this graph is -0.0035555555555555554
修正方案2:简化版(仅计算固定值)
如果只需要计算这一组固定数值的梯度,没必要定义函数,直接计算即可:
# 定义数值 y1 = 1.07 y2 = 1.39 x1 = 283 x2 = 373 # 直接计算梯度 gradient = (y1 - y2) / (x2 - x1) print('The gradient of this graph is', gradient)
内容的提问来源于stack exchange,提问作者Erin O'Halloran
相关产品推荐
相关产品推荐

