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

C++如何将符合对数正态分布的矩阵数据写入CSV文件

问题原因

你当前的代码在输出每行数据时,仅输出了行号和1个随机数值就直接换行,没有为剩余的49列生成对应数值,因此其余列全部为空。

修改要点

  1. 补全缺失的头文件:原代码中使用std::setw、std::setfill需要引入<iomanip>,字符串流需要引入<sstream>(你误写为<stream>)
  2. 新增内层循环:每行输出行号后,循环遍历所有列,为每一列生成对应的对数正态分布数值后再换行
  3. 可选优化:控制浮点数输出精度,匹配你示例中的6位小数格式

修改后的完整代码

#include <iostream>
#include <vector>
#include <random> 
#include <fstream>
#include <sstream>
#include <iomanip>

// 定义常量方便后续调整
const int COL_NUM = 50; // 总列数(S开头的列数)
const int ROW_NUM = 1000; // 总行数
const int PRECISION = 6; // 浮点数输出精度

std::string GetNextNumber(int lastNum)
{
    std::stringstream ss;
    ss << "S";
    ss << std::setfill('0') << std::setw(4) << lastNum;
    return ss.str();
}
int main()
{
    std::default_random_engine generator;
    std::lognormal_distribution<double> distribution(0.0,1.0);
    
    std::ofstream outFile("Data_bid.csv");
    // 设置浮点数输出精度
    outFile << std::fixed << std::setprecision(PRECISION);
    
    // 输出表头
    outFile << ""; // 第一列表头为空,对应你示例里第一个单元格的位置
    for(int j=0; j<COL_NUM; ++j){ 
        outFile << "," << GetNextNumber(j+1);
    }
    outFile << std::endl;
    
    // 输出每行数据
    for(int i=0; i<ROW_NUM; ++i){       
        // 输出第一列的行号
        outFile << i;
        // 循环输出每一列的随机数值
        for(int j=0; j<COL_NUM; ++j){
            double bid = distribution(generator) + 10;
            outFile << "," << bid;
        }
        // 写完所有列再换行
        outFile << std::endl;
    }   
    outFile.close();

    return 0;
} 

其他说明

如果需要实现你示例中部分单元格为空的效果,只需要在内层循环中加判断逻辑,符合条件时不输出数值(直接输出,即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:36:04