如何解决C++ KNN_classifier函数循环无法移动到下一行的问题
问题根源
你当前的代码逻辑不符合KNN的距离计算要求,核心错误点如下:
- 你在函数参数中传入了待计算距离的目标单样本
data_point[20],但整个函数内完全没有用到这个参数 - 当前内层循环里给
mydatapoint赋值的是array_X_set[i][j],实际计算的是X_train的第i行和array_X_set的第i行的欧氏距离,不是你需要的X_train所有样本和目标data_point的距离 - 你的循环逻辑本身可以正确逐行遍历X_train,不存在“没有正确移动到下一行”的问题,不需要额外使用transfer_index之类的索引转换处理
修复方案
把内层循环中给mydatapoint赋值的逻辑替换为读取传入的data_point即可,修改后的核心循环代码如下:
for (int i = 0; i < 4344; ++i) { for (int j = 0; j < 20; ++j) { myxtrain[j] = X_train[i][j]; // 这里替换成读取传入的待预测样本data_point,不要读array_X_set的第i行 mydatapoint[j] = data_point[j]; } array_dist[i] = Euclidean_distance(myxtrain, mydatapoint); index_arr[i] = i; }
额外优化建议
- 既然data_point是固定的单样本,不需要每次内层循环都重复赋值,可以在内层循环外提前把data_point的值拷贝到mydatapoint里,减少冗余操作
- 如果修改后Euclidean_distance函数仍然返回错误,需要检查该函数的实现是否正确处理了长度为20的int数组输入、是否正确完成了平方和开平方的计算
内容的提问来源于stack exchange,提问作者JOJO
相关产品推荐
相关产品推荐

