You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:09:03