int main()
{
    // create directory to save weights in
    const int dir_err = mkdir("saved_matrix_weights", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
    
    cout << "\n========== WRITING MATRICES TO FILES ==========" << endl;
    
    for(int i = 0; i < 10; ++i)
    {
        MatrixXf matrix = MatrixXf::Random(40,40);

        ostringstream stringStream;
        stringStream << "saved_matrix_weights/matrix" << i << ".txt";
        string fileName = stringStream.str();
        
        cout << "\nAttempting to write to file: " << fileName << endl;
        //cout << matrix << endl;
        
        ofstream file(fileName, ofstream::out | ofstream::trunc);

        if (file.is_open())
        {
            file << matrix.rows() << "\n";
            file << matrix.cols() << "\n";
            file << matrix.format(CSV);
            
            file.close();
        }
    }
    
    cout << "\n========== READING MATRICES FROM FILES ==========" << endl;
    
    for(int i = 0; i < 10; ++i)
    {
        ostringstream stringStream;
        stringStream << "saved_matrix_weights/matrix" << i << ".txt";
        string fileName = stringStream.str();
        
        cout << "\nAttempting to read from file: " << fileName << endl;
        
        ifstream file(fileName, ifstream::in);
        
        string rowsString;
        string colsString;
        int rows;
        int cols;
        string tempString;
        
        if (file.is_open())
        {
            getline(file, rowsString);
            getline(file, colsString);
            rows = stoi(rowsString);
            cols = stoi(colsString);
            
            MatrixXf matrix(rows, cols);
            
            for(int j = 0; j < rows; ++j)
            {
                for(int k = 0; k < cols; ++k)
                {
                    getline(file, tempString, ',');
                    matrix(j, k) = stof(tempString);
                }
            }
            
            //cout << "Matrix " << i << ":" << endl;
            //cout << "rows: " << rows << ", cols: " << cols << endl;
            //cout << matrix << endl;
            
            file.close();
        }
    }
    
    return 0;
}