1 #ifndef __UTILS_UTILS_H_INCLUDED__
8 #define __UTILS_UTILS_H_INCLUDED__
10 template<
typename Matrix>
11 void removeRow(Matrix& matrix, gsl::index rowToRemove)
13 gsl::index numRows = matrix.rows()-1;
14 gsl::index numCols = matrix.cols();
16 if( rowToRemove < numRows )
17 matrix.block(rowToRemove,0,numRows-rowToRemove,numCols) = matrix.block(rowToRemove+1,0,numRows-rowToRemove,numCols).eval();
19 matrix.conservativeResize(numRows,numCols);
21 template<
typename Matrix>
24 gsl::index numRows = matrix.rows();
25 gsl::index numCols = matrix.cols()-1;
27 if( colToRemove < numCols )
28 matrix.block(0,colToRemove,numRows,numCols-colToRemove) = matrix.block(0,colToRemove+1,numRows,numCols-colToRemove).eval();
30 matrix.conservativeResize(numRows,numCols);
34 void select(std::vector<T>& result,
const std::vector<T>& in,
const std::vector<
typename std::vector<T>::size_type>& s) {
35 result.reserve(s.size());
37 [&in](
typename std::vector<T>::size_type idx) {
42 std::tuple<std::vector<gsl::index>,std::vector<gsl::index> >
TrainTestSplit(gsl::index nrows,
double testRatio=0.3){
43 assert(testRatio>=0 && testRatio<=1);
44 gsl::index ntest = (gsl::index) nrows*(testRatio);
45 gsl::index ntrain = nrows - ntest;
46 std::vector<int> idx(nrows);
47 std::iota(idx.begin(), idx.end(), 0);
49 std::vector<gsl::index> trainIdx, testIdx;
50 trainIdx.resize(ntrain);
51 testIdx.resize(ntest);
52 std::sample(idx.begin(), idx.end(), std::back_inserter(testIdx),
53 ntest, std::mt19937{std::random_device{}()});
54 std::sort(testIdx.begin(),testIdx.end());
55 std::set_difference(idx.begin(), idx.end(), trainIdx.begin(), trainIdx.end(),
56 std::inserter(testIdx, testIdx.begin()));
57 return {trainIdx,testIdx};
60 std::tuple<std::vector<gsl::index>,std::vector<gsl::index> >
TrainTestSplit(std::vector<gsl::index> inputIdx,
double testRatio=0.3){
61 assert(testRatio>=0 && testRatio<=1);
62 gsl::index nrows = inputIdx.size();
63 gsl::index ntest = (gsl::index) nrows*(testRatio);
64 gsl::index ntrain = nrows - ntest;
65 std::vector<int> idx(nrows);
66 std::iota(idx.begin(), idx.end(), 0);
68 std::vector<gsl::index> trainIdx, testIdx;
69 trainIdx.resize(ntrain);
70 testIdx.resize(ntest);
71 std::sample(inputIdx.begin(), inputIdx.end(), std::back_inserter(testIdx),
72 ntest, std::mt19937{std::random_device{}()});
73 std::sort(testIdx.begin(),testIdx.end());
74 std::sort(inputIdx.begin(),inputIdx.end());
75 std::set_difference(inputIdx.begin(), inputIdx.end(), trainIdx.begin(), trainIdx.end(),
76 std::inserter(testIdx, testIdx.begin()));
77 return {trainIdx,testIdx};
81 std::vector<T>
linspace(T start_in, T end_in,
int num_in)
84 std::vector<T> linspaced;
86 double start =
static_cast<double>(start_in);
87 double end =
static_cast<double>(end_in);
88 double num =
static_cast<double>(num_in);
90 if (num == 0) {
return linspaced; }
93 linspaced.push_back(start);
97 double delta = (end - start) / (num - 1);
98 for(
int i=0; i < num-1; ++i)
100 linspaced.push_back(start + delta * i);
102 linspaced.push_back(end);
109 std::cout <<
"size: " <<
vec.size() << std::endl;
111 std::cout << d <<
" ";
112 std::cout << std::endl;