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

C++中声明double类型数组的数组并循环批量处理多组特征数组的实现方法

批量处理多组特征数组的C++实现方案

我来帮你搞定这个批量处理的需求,结合你现有的代码,咱们可以通过静态二维数组或者动态容器vector两种方式来实现,不用再手动修改数组了,直接循环跑6组数据就行。

方法一:静态二维数组(适合固定组数和元素数的场景)

这种方式最直接,因为你已经确定是6组、每组44个元素,静态数组的效率也很高。

修改后的完整代码示例

#include <cstdio>

// 假设你的数据结构和预测函数定义如下(根据实际情况调整)
struct DataItem {
    int missing;
    double fvalue;
};
DataItem data[44];
void predict_res(DataItem*, int, double*);

int main() {
    // 声明6组特征数组,每组44个double元素
    double feature_sets[6][44] = {
        // 第一组数据(就是你原来的feature_values)
        {0.0003323988609746907, 0.6412162477054423, 9.545269768297, -1323.6125512135593, -1512.0718516647562, -2073.6020535721273, -2578.302701605687, 0.27304053703708875, 0.5580326301604825, 0.34912544310755905, 0.550917816717867, 49.7455110651867, 1821.15723334093, -61.3700045037962, -49.400686298507, 13.11111111111111, 26.0, 12.222222222222221, 18.0, 0.3111111111111111, 0.325, 0.4148148148148148, 0.43333333333333335, 0.5930328763108722, 0.7343377194812131, 0.23685155593995189, 0.6754530381265557, 0.16582557525922734, 0.009828988419922594, 0.00017475124235758377, 0.0003779194334627987, 0.0008100853061379151, 2.9387129701088046, 0.41880424639672703, 2.639057329615259, 0.0, 2.75, 2.807354922057604, 0.07124096827009982, 0 , 0.003, 0.1435385870250432, 0.5547574989867142, 0.1445909953802227},
        // 第二组数据(把你的第二组feature_values放这里)
        {/* ... */},
        // 第三组
        {/* ... */},
        // 第四组
        {/* ... */},
        // 第五组
        {/* ... */},
        // 第六组
        {/* ... */}
    };

    // 存储6组的预测结果
    double results[6];

    // 循环处理每一组特征
    for (int set_idx = 0; set_idx < 6; ++set_idx) {
        // 填充当前组的data数组
        for (int i = 0; i < 44; ++i) {
            data[i].missing = -1;
            data[i].fvalue = feature_sets[set_idx][i];
            printf("Set %d, feature[%d] = %.8f\n", set_idx, i, feature_sets[set_idx][i]);
        }

        // 调用预测函数,保存结果
        predict_res(data, 0, &results[set_idx]);
        printf("=== Set %d Prediction Result: %.8f ===\n\n", set_idx, results[set_idx]);
    }

    return 0;
}

关键说明

  • double feature_sets[6][44]:直接声明了一个6行44列的二维数组,feature_sets[set_idx]就是第set_idx组的特征数组。
  • 外层循环set_idx遍历6组数据,内层循环负责把当前组的特征值赋值给data数组。
  • results[6]专门用来存储每组的预测结果,方便后续查看或进一步处理。

方法二:动态容器vector(适合组数或元素数可能变化的场景)

如果以后你可能需要增加/减少特征组,或者每组元素数不确定,用std::vector会更灵活,不用修改数组大小的硬编码。

代码示例

#include <cstdio>
#include <vector>

// 同样假设你的数据结构和预测函数定义
struct DataItem {
    int missing;
    double fvalue;
};
DataItem data[44];
void predict_res(DataItem*, int, double*);

int main() {
    // 用vector存储多组特征,每组是一个vector<double>
    std::vector<std::vector<double>> feature_sets = {
        // 第一组数据
        {0.0003323988609746907, 0.6412162477054423, ... /* 你的第一组数据 */},
        // 第二组
        {/* ... */},
        // ... 其他组
    };

    // 动态创建结果容器,大小和特征组数量一致
    std::vector<double> results(feature_sets.size());

    // 循环处理每组
    for (size_t set_idx = 0; set_idx < feature_sets.size(); ++set_idx) {
        const auto& current_features = feature_sets[set_idx];
        // 确保当前组的元素数是44,避免越界(可以加个判断)
        if (current_features.size() != 44) {
            printf("Warning: Set %zu has invalid feature count!\n", set_idx);
            continue;
        }

        for (int i = 0; i < 44; ++i) {
            data[i].missing = -1;
            data[i].fvalue = current_features[i];
            printf("Set %zu, feature[%d] = %.8f\n", set_idx, i, current_features[i]);
        }

        predict_res(data, 0, &results[set_idx]);
        printf("=== Set %zu Prediction Result: %.8f ===\n\n", set_idx, results[set_idx]);
    }

    return 0;
}

关键说明

  • std::vector<std::vector<double>>相当于动态的二维数组,你可以随时用push_back添加新的特征组。
  • 用feature_sets.size()获取当前的组数,不用硬写6,扩展性更好。
  • 增加了元素数校验,避免因为某组特征数量不对导致的越界错误。

注意事项

  1. 确保每组特征的元素个数都是44,否则会出现数组越界的问题,程序可能崩溃。
  2. 如果data是局部变量,每次循环前会自动初始化,但你的代码里每次都赋值了missing和fvalue,所以不用担心残留数据。
  3. 确认predict_res函数的第三个参数是接收结果的指针(或者引用),这样才能把预测结果保存到results数组里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:49:04