NumPy数组传入costfunc后变为浮点数引发索引错误求助
问题分析与解决
核心原因:参数顺序不匹配
你遇到的问题本质是函数调用时的参数传递顺序和函数定义的参数顺序完全不一致,导致变量被错误赋值:
- 在
graddes函数中调用costfunc时,传入的参数顺序是:costfunc(x1,x2, yread, w1,w2 , b) - 但
costfunc的定义参数顺序是:def costfunc(w1,w2,b,yread,x1,x2):
这就造成了:
costfunc里的w1变量实际接收的是外部的x1(数组)costfunc里的x1变量实际接收的是外部的w1(标量/浮点数)
所以当你在costfunc中执行x1[i]时,x1已经是一个标量,自然触发IndexError: invalid index to scalar variable。
解决方案
调整graddes中调用costfunc的参数顺序,使其与costfunc的定义顺序一致:
# 修改graddes函数中的这一行 J_history.append( costfunc(w1,w2,b,yread,x1,x2) )
额外优化建议(可选)
你的costfunc用循环计算损失,效率较低,可以改用numpy的向量化运算替代,大幅提升速度:
def costfunc(w1,w2,b,yread,x1,x2): # 向量化计算所有样本的预测值 y_pred = np.dot(x1, w1) + np.dot(x2, w2) + b # 计算平均损失 err = np.sum((y_pred - yread)**2) / (2 * len(yread)) return err
注:如果w1是(12,)形状的向量,x1是(17378,12)的数组,np.dot(x1, w1)会直接生成(17378,)的预测值数组,与yread维度匹配。
内容的提问来源于stack exchange,提问作者VikramVaidyanathan Triple V Ve
相关产品推荐
相关产品推荐

