测试代价函数参数时触发IndexError索引越界问题求助
修复代价函数中的IndexError索引越界问题
错误信息
IndexError: index 6 is out of bounds for axis 0 with size 6
问题场景
测试代价函数时触发上述错误,其他w、b参数测试能得到预期输出,本次测试输出正确但报错。输入矩阵X为100行2列(m=100,n=2)。
相关代码
代价函数核心循环代码
for i in range(m): z_wb = 0 for j in range(n): # Your code here to calculate w[j] * X[i][j] z_wb += z_wb_ij # equivalent to z_wb = z_wb + z_wb_ij z_wb+=b – z_wb_ij = w[j] * X[i][j]
错误栈信息
# Calls the compute_cost function that you implemented above ---> 18 cost_without_reg = compute_cost(X, y, w, b) 19 20 print(f'cost without reg is:{cost_without_reg}') <ipython-input-17-d111fe703811> in compute_cost(X, y, w, b, *argv) 32 for j in range(n): 33 # Add the corresponding term to z_wb ---> 34 z_wb_ij = w[j]*X[i][j] # Your code here to calculate w[j] * X[i][j] 35 z_wb += z_wb_ij # equivalent to z_wb = z_wb + z_wb_ij 36
问题根源
代码中循环变量j的取值范围range(n)与w的维度不匹配:w的长度为6(仅支持索引0-5),但j被循环到了6,导致访问w[6]时触发越界。大概率是compute_cost函数中n的赋值错误——比如误将n设置为len(w)而非X的列数X.shape[1],或者调用函数时传入了长度为6的w(而X仅2列)。
修复方案
正确获取n的值:
在compute_cost函数开头,通过X的形状获取列数,确保n与X的列数一致:m, n = X.shape # m为行数,n为列数,此处n=2避免从
w的长度推导n,否则会随w的维度变化导致不匹配。确保w的维度匹配:
调用compute_cost时,传入的w必须是长度为n(即2)的数组,检查当前传入的w是否符合要求,若长度为6则调整为对应2列的权重数组。验证循环逻辑:
内层循环for j in range(n)在n=2时,j只会取0和1,不会超出w的索引范围(0-1),彻底避免越界错误。
内容的提问来源于stack exchange,提问作者Lori Wojciechowicz
相关产品推荐
相关产品推荐

