C++中不同维度的数据保存与读取

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;
		}
	}
}
相关推荐
夜航海图13 小时前
S-57 数据解剖:把一个 ENC 文件拆给你看
c++
(Charon)13 小时前
【C++】网络缓冲区设计(三):Chain Buffer链式缓冲区、动态扩容与跨节点读写
服务器·c++
玖玥拾13 小时前
Lua 基础语法(二)
开发语言·unity·lua
王的宝库13 小时前
GO常用标准库包
开发语言·后端·golang
geovindu13 小时前
python: Face Recognition
开发语言·后端·python·人脸识别
平头哥技术团队14 小时前
Day 13 | 调 line-height 和 margin:三处间距让名片页脱离模板感
开发语言·前端·javascript·学习·html5
黑马程序员毕设14 小时前
基于Java的仪器管理系统设计与实现
java·开发语言·spring boot·后端·微信小程序
平头哥AI14 小时前
Day 13 | 一个函数回两个值:Go 的 error 是从哪冒出来的
开发语言·后端·golang
asdzx6714 小时前
Python 实现 PDF 文本查找与高亮标注
开发语言·python·pdf
zander25814 小时前
LeetCode 1143. 最长公共子序列
开发语言·python·算法