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

如何使用循环填充不同尺寸数组内容及Y_train填充异常问题排查

问题根因

你代码里的逻辑错误直接导致Y_train赋值异常,核心问题有3个:

  1. case1分支中,你把Y数组的赋值放在了内层j循环里,同一个行i对应的Y值会被重复赋值20次,且行计数器nTrain、nTest从未递增,所有Y值都被写到了下标0的位置,其余位置自然保持初始零值。
  2. 列计数器nTrain1、nTest1每遍历完一行的20个元素后没有重置为0,遍历完第一行后计数器就变成20,后续访问直接数组越界,属于未定义行为,X_train看起来正常只是巧合。
  3. 第二个分支里测试集赋值直接用i作为X_test、Y_test的下标,而这两个数组的最大下标只有1085,直接越界写内存,也会导致Y值异常。

修复后代码

void split(int fold, int array_X_set[5430][20], int array_Y_set[5430],
    int X_train[4344][20], int Y_train[4344],
    int X_test[1086][20], int Y_test[1086])
{
    int rows = 5430;
    int cols = 20;
    int division = 1086;
    int nTest = 0, nTrain = 0;
    switch (fold) {
    case 1:
        for (int i = 0; i < rows; ++i) {
            if (i < division) {
                // 先复制整行X
                for (int j = 0; j < cols; ++j) {
                    X_test[nTest][j] = array_X_set[i][j];
                }
                // 再赋值对应Y,行计数器自增
                Y_test[nTest] = array_Y_set[i];
                nTest++;
            } else {
                for (int j = 0; j < cols; ++j) {
                    X_train[nTrain][j] = array_X_set[i][j];
                }
                Y_train[nTrain] = array_Y_set[i];
                nTrain++;
            }
        }
        break;
    // 其余fold分支参考该逻辑修改即可,比如测试集为1086~2171的分支:
    case 2:
        nTest = 0;
        nTrain = 0;
        for (int i = 0; i < rows; ++i) {
            if (i >= 1086 && i <= 2171) {
                for (int j = 0; j < cols; ++j) {
                    X_test[nTest][j] = array_X_set[i][j];
                }
                Y_test[nTest] = array_Y_set[i];
                nTest++;
            } else {
                for (int j = 0; j < cols; ++j) {
                    X_train[nTrain][j] = array_X_set[i][j];
                }
                Y_train[nTrain] = array_Y_set[i];
                nTrain++;
            }
        }
        break;
    default:
        break;
    }
}

内容的提问来源于stack exchange,提问作者user555

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:00:02