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;
		}
	}
}
相关推荐
small_wh1te_coder8 分钟前
c语言超详细知识点总结 1500行手写源码 持续更新中ing 从25年5月到6月5日
c++·c
SteveDraw2 小时前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
十五年专注C++开发2 小时前
设计模式之单例模式(二): 心得体会
开发语言·c++·单例模式·设计模式
?!7142 小时前
算法打卡第18天
c++·算法
flyair_China2 小时前
【云架构】
开发语言·php
Chef_Chen3 小时前
从0开始学习R语言--Day20-ARIMA与格兰杰因果检验
开发语言·学习·r语言
zh_xuan3 小时前
c++ std::pair
开发语言·c++
CodeWithMe3 小时前
【C/C++】EBO空基类优化介绍
开发语言·c++
404.Not Found3 小时前
Day46 Python打卡训练营
开发语言·python