C++中不同维度的数据保存与读取
- 一、保存csv数据
-
- [1.1 一维vector](#1.1 一维vector)
- [1.2 二维vector](#1.2 二维vector)
- [1.3 三维vector](#1.3 三维vector)
- [1.4 五维vector](#1.4 五维vector)
- 二、读取csv数据
-
- [2.1 一维vector](#2.1 一维vector)
- [2.2 二维vector](#2.2 二维vector)
- [2.3 三维vector](#2.3 三维vector)
- [2.4 五维vector](#2.4 五维vector)
一、保存csv数据
1.1 一维vector
cpp
复制代码
void Save_bias(vector<double> &bias, string names)
{
string folderPath = "..//parameter_bias//" + names;
if (0 != _access(folderPath.c_str(), 0))
{
_mkdir(folderPath.c_str());
}
ofstream pxData;
pxData.open(folderPath + "//0.csv", std::ios::out | std::ios::trunc);
for (int i = 0; i < bias.size(); i++)
{
if (i == bias.size() - 1)
{
pxData << bias[i] << std::endl;
}
else
{
pxData << bias[i] << ",";
}
}
pxData.close();
}
1.2 二维vector
cpp
复制代码
void Save_means(vector<vector<double>> &means, string names)
{
string folderPath = "..//parameter_mpvs//" + names;
if (0 != _access(folderPath.c_str(), 0))
{
_mkdir(folderPath.c_str());
}
ofstream pxData;
pxData.open(folderPath + "//0.csv", std::ios::out | std::ios::trunc);
for (int i = 0; i < means.size(); i++)
{
for (int j = 0; j < means[i].size(); j++)
{
if (j == means[i].size() - 1)
{
pxData << means[i][j] << std::endl;
}
else
{
pxData << means[i][j] << ",";
}
}
}
pxData.close();
}
1.3 三维vector
cpp
复制代码
void Save_weight(vector<vector<vector<double>>> &weight, string names)
{
string folderPath = "..//parameter_weight//" + names;
if (0 != _access(folderPath.c_str(), 0))
{
_mkdir(folderPath.c_str());
}
for (int j = 0; j < weight.size(); j++)
{
ofstream pxData;
if (j < 10)
{
pxData.open(folderPath + "//0" + to_string(j) + ".csv", std::ios::out | std::ios::trunc);
}
else
{
pxData.open(folderPath + "//" + to_string(j) + ".csv", std::ios::out | std::ios::trunc);
}
for (int p = 0; p < weight[j].size(); p++)
{
for (int q = 0; q < weight[j][p].size(); q++)
{
if (q == weight[j][p].size() - 1)
{
pxData << weight[j][p][q] << std::endl;
}
else
{
pxData << weight[j][p][q] << ",";
}
}
}
pxData.close();
}
}
1.4 五维vector
cpp
复制代码
void Save_weight(vector<vector<vector<vector<vector<double>>>>> weight, string names)
{
string init_file = "..//parameter_weight";
if (0 != _access(init_file.c_str(), 0))
{
_mkdir(init_file.c_str());
}
string folderPath = init_file + "//" + names;
if (0 != _access(folderPath.c_str(), 0))
{
_mkdir(folderPath.c_str());
}
for (int i = 0; i < weight.size(); i++)
{
string folderPaths = folderPath + "//" + to_string(i);
if (0 != _access(folderPaths.c_str(), 0))
{
_mkdir(folderPaths.c_str());
}
for (int j = 0; j < weight[i].size()*weight[i][0].size(); j++)
{
ofstream pxData;
if (j < 10 && weight[i].size()*weight[i][0].size() > 9)
{
pxData.open(folderPaths + "//0" + to_string(j) + ".csv", std::ios::out | std::ios::trunc);
}
else
{
pxData.open(folderPaths + "//" + to_string(j) + ".csv", std::ios::out | std::ios::trunc);
}
for (int p = 0; p < weight[i][j / weight[i].size()][j % weight[i][0].size()].size(); p++)
{
for (int q = 0; q < weight[i][j / weight[i].size()][j % weight[i][0].size()][p].size(); q++)
{
if (q == weight[i][j / weight[i].size()][j % weight[i][0].size()][p].size() - 1)
{
pxData << weight[i][j / weight[i].size()][j % weight[i][0].size()][p][q] << std::endl;
}
else
{
pxData << weight[i][j / weight[i].size()][j % weight[i][0].size()][p][q] << ",";
}
}
}
pxData.close();
}
}
}
二、读取csv数据
2.1 一维vector
cpp
复制代码
void Read_bias(vector<double> &bias, string names)
{
string folderPath = "..//parameter_bias//" + names;
ifstream infile(folderPath + "//0.csv", ifstream::_Nocreate);
string line, number;
while (std::getline(infile, line))
{
istringstream is(line);
vector<double> lineArray;
while (std::getline(is, number, ','))
{
lineArray.push_back(atof(number.c_str()));
}
bias = lineArray;
}
}
2.2 二维vector
cpp
复制代码
void Read_means(vector<vector<double>> &means, string names)
{
string folderPath = "..//parameter_means//" + names;
ifstream infile(folderPath + "//0.csv", ifstream::_Nocreate);
string line, number;
while (std::getline(infile, line))
{
istringstream is(line);
vector<double> lineArray;
while (std::getline(is, number, ','))
{
lineArray.push_back(atof(number.c_str()));
}
means.push_back(lineArray);
}
}
2.3 三维vector
cpp
复制代码
void Read_weight(vector<vector<vector<double>>> &weight, string names)
{
string folderPath = "..//parameter_weight//" + names;
string dir;
for (int j = 0; j < weight.size(); j++)
{
ofstream pxData;
if (j < 10)
{
dir = folderPath + "//0" + to_string(j) + ".csv";
}
else
{
dir = folderPath + "//" + to_string(j) + ".csv";
}
ifstream infile(dir, ifstream::_Nocreate);
string line, number;
vector<vector<double>> x;
while (std::getline(infile, line))
{
istringstream is(line);
vector<double> lineArray;
while (std::getline(is, number, ','))
{
lineArray.push_back(atof(number.c_str()));
}
x.push_back(lineArray);
}
weight[j] = x;
}
}
2.4 五维vector
cpp
复制代码
void Read_weight(vector<vector<vector<vector<vector<double>>>>> &_weight, string names)
{
string dir_path = "..//parameter_weight";
for (int i = 0; i < _weight.size(); i++)
{
for (int j = 0; j < _weight[i].size()*_weight[i][0].size(); j++)
{
string dir;
if (j < 10 && _weight[i].size()*_weight[i][0].size() > 9)
{
dir = dir_path + "//" + names + "//" + to_string(i) + "//0" + to_string(j) + ".csv";
}
else
{
dir = dir_path + "//" + names + "//" + to_string(i) + "//" + to_string(j) + ".csv";
}
ifstream infile(dir, ifstream::_Nocreate);
string line, number;
vector<vector<double>> x;
while (std::getline(infile, line))
{
istringstream is(line);
vector<double> lineArray;
while (std::getline(is, number, ','))
{
lineArray.push_back(atof(number.c_str()));
}
x.push_back(lineArray);
}
_weight[i][j / _weight[i].size()][j % _weight[i][0].size()] = x;
}
}
}