-
Notifications
You must be signed in to change notification settings - Fork 0
/
read_data.cpp
69 lines (56 loc) · 3.17 KB
/
read_data.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "read_data.hpp" // read_data header file
#include <Eigen/Dense> // Eigen Library
#include <vector> // for vector operations
#include <string> // for string operations
#include <iostream> // input output operation: cout
#include <fstream> // file stream operation: ifstream
#include <sstream> // string stream operation: istringstream
#include <algorithm> // replace functionality
/*
Input: dataset file
Output: returns dataset, data in two-dimensional vector.
*/
using namespace std;
//function to read any dataset with all numerical values like MNIST dataset.
void ReadData(string inputfile, vector<vector<double> > &X, vector<double> &Y) {
ifstream fin; // declaring the input file stream
fin.open(inputfile); // opening the inputfile
int l = 0; // declaring a integer to track the number of line
string line; // declaring a string to hold the read line of the input file
if (fin.is_open()) // if the input file is open
{
cout << "File " << inputfile << " opened successfully " << endl;
while (getline(fin, line)) // storing the line of input file on the variable line
{
l++; // increasing the line read counter
istringstream linestream(line); // converting the read line into an string stream
vector <double> row; // declaring a vector to store the current row
int val = 0; // declaring a variable to track the number of values in a row
while (linestream) { // while the string stream is not null
string row_value; // declaring a string to hold the row values
if (!getline(linestream, row_value, ',')) // storing the values from stream into row_value one by one
break; // at the end of row break the while loop
try {
if (val < 784) {
row.push_back(stod(row_value)); // pushing the current value into the row for X values
val++;
}
else if (val == 784) // pushing the current value into the Y for y values
{
Y.push_back(stod(row_value));
}
}
catch (const invalid_argument err) { // if there is a error catch the error and display it
cout << "Invalid value found in the file: " << inputfile << " line: " << l << " value: " << val << endl;
err.what();
}
}
X.push_back(row); // pushing the row into the dataset
row.clear(); // clearing the row vector to store the next row
}
cout << "Lines read successfully: " << l << endl; // displaying the number or lines reads from the input file
}
else{
cout << "Unable to open the specified file " << endl; // output if file can't be opened
}
}