【发布时间】:2020-12-29 23:05:56
【问题描述】:
int main()
{
auto base_dir = fs::current_path();
auto dataset_1 = data_names_1;
auto dataset_name = base_dir / "NAimg_20101026_145727.csv";
//double data[10][3];
std::ifstream file(dataset_name);
matrix<DataType> data_length;
file >> data_length;
auto pre_num_row = data_length.nc();
static const int num_row = 73;//data_length.nr();
static const int num_column = 74496; //data_length.nc();
std::cout << num_row << "\n";
std::cout << num_column << "\n";
double data[73][74496];
for (int row = 0; row < 73; ++row)
{
std::string line;
std::getline(file, line);
if (!file.good())
break;
std::stringstream iss(line);
for (int col = 0; col < 74496; ++col)
{
std::string val;
std::getline(iss, val, ',');
if (!iss.good())
break;
std::stringstream convertor(val);
convertor >> data[row][col];
}
}
std::cout << data[1][1] << "\n";
}
您好,我的名字是 Q。我想读取一个 csv 文件(这里文件的名称是 NAimg_20101026_145727.csv)并将数据加载到数据数组中。文件的行列大小分别为 73 和 74496。因此,我需要双 data[73][74496] 数组。它会出错。当我制作一个小数组时,例如 double data[10][20],没有错误。你知道是什么问题吗?
我还有一个问题。我想从 csv 文件中读取行和列的大小并自动确定双数据 [行] [列] 的大小。因此,我尝试使用 data_length.nc();决定双倍数据大小的行和列。您知道如何从 csv 文件中确定双数据 [行] [列] 的大小吗?谢谢
【问题讨论】:
-
您的代码需要
#includes 和namespace fs = std::filesystem;等才能工作。不要为您的 minimal reproducible example 删除必要的代码,以使其具有可重复性。 -
double data[73][74496];将是43,505,664字节,超过您的堆栈大小至少 1 或 5 倍。(可能是 8 倍,如果在 Windows 上为 43 倍)使用std::vector<std::vector<double>>或动态分配(std::vector是首选)