Newer
Older
#include "dataParser.h"
using namespace std;
#undef min
void help::trimLeft(string &s, string const &delimiters)
{
const size_t startpos = s.find_first_not_of(delimiters);
if (string::npos != startpos)
{
//s = s.substr(startpos, s.end);
s.erase(s.begin(), s.begin() + startpos);
}
}
void help::trimRight(string &s, string const &delimiters)
{
const size_t endpos = s.find_last_not_of(delimiters);
if (string::npos != endpos)
{
//s = s.substr(0, endpos + 1);
s.erase(s.begin() + endpos + 1, s.end());
}
}
void help::trim(string &s, string const &delimiters)
{
trimLeft(s, delimiters);
trimRight(s, delimiters);
vector<string> help::split(string const& s, char const *d)
{
vector<string> output;
bitset<255> delims;
while (*d)
{
unsigned char code = *d++;
delims[code] = true;
}
string::const_iterator beg;
bool in_token = false;
for (string::const_iterator it = s.begin(), end = s.end(); it != end; ++it)
{
if (delims[*it])
{
if (in_token)
{
//output.push_back(beg, it);
output.push_back(vector<string>::value_type(beg, it));
in_token = false;
}
}
else if (!in_token)
{
beg = it;
in_token = true;
}
}
if (in_token)
output.push_back(vector<string>::value_type(beg, s.end()));
return output;
}
vector<string> help::split1(const string &str, const string &delimiter)
{
vector<string> tokens;
size_t prev = 0, pos = 0;
do
{
pos = str.find(delimiter, prev);
if (pos == string::npos) pos = str.length();
string token = str.substr(prev, pos - prev);
if (!token.empty()) tokens.push_back(token);
prev = pos + delimiter.length();
} while (pos < str.length() && prev < str.length());
return tokens;
}
vector<string> help::split2(string const &s, string const &delimiters)
{
vtr<std::string> result;
std::string::size_type pos = 0;
while (std::string::npos != (pos = s.find_first_not_of(delimiters, pos))) {
auto pos2 = s.find_first_of(delimiters, pos);
result.emplace_back(s.substr(pos, std::string::npos == pos2 ? pos2 : pos2 - pos));
pos = pos2;
}
return result;
//vtr2<double> help::convertToDouble(vtr2<string> const &strInput)
//{
// vtr2<double> dd;
//
// for (size_t i = 0; i < strInput.size(); i++)
// {
// vector<double> d = convertToDouble(strInput[i]);
// dd.push_back(d);
// }
//
// return dd;
//}
//
//vector<double> help::convertToDouble(vector<string> const &strInput)
//{
// vector<double> d;
//
// for (size_t i = 0; i < strInput.size(); i++)
// {
// d.push_back(stod(strInput[i]));
// }
//
// return d;
//}
void help::correctBomLine(string &s)
if (s.compare(0, 3, "\xEF\xBB\xBF") == 0) // Is the file marked as UTF-8?
{
s.erase(0, 3); // Now get rid of the BOM.
}
else if (s.compare(0, 2, "\xFE\xFF") == 0) // Is the file marked as UTF-16 BE?
{
s.erase(0, 2); // Now get rid of the BOM.
}
else if (s.compare(0, 2, "\xFF\xFE") == 0) // Is the file marked as UTF-16 LE
{
s.erase(0, 2); // Now get rid of the BOM.
}
else if (s.compare(0, 4, "\x00\x00\xFE\xFF") == 0) // Is the file marked as UTF-32 BE?
{
s.erase(0, 4); // Now get rid of the BOM.
}
else if (s.compare(0, 4, "\xFF\xFE\x00\x00") == 0) // Is the file marked as UTF-32 LE?
{
s.erase(0, 4); // Now get rid of the BOM.
}
void help::interpolate(vtr3<double> &input)
int maxLen = -1;
for (auto const &s : input)
{
if ((int)s.size() > maxLen)
maxLen = (int)s.size();
}
for (size_t i = 0; i < input.size(); i++)
{
int diff = maxLen - (int)input[i].size();
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
while (diff > 0)
{
int c = 0;
vtr2<double> row;
for(size_t k = 0; k < input[i].size() - 1 && diff > 0; k++)
{
vector<double> el;
if (k % 2 == 1)
{
for (size_t j = 0; j < input[i][k].size(); j++)
{
double tmp = (input[i][c - 1][j] + input[i][c][j]) / 2.0;
el.push_back(tmp);
}
row.push_back(el);
diff--;
}
else
{
row.push_back(input[i][c]);
c++;
}
}
row.insert(row.end(), input[i].begin() + c, input[i].end());
input[i] = row;
}
}
void help::normalizeMany(vtr3<double> &input)
for (size_t i = 0; i < input.size(); i++) //dims
{
normalize(input[i]);
}
void help::normalize(vtr2<double> &input)
for (size_t i = 0; i < input[0].size(); i++) //dims
for (size_t j = 0; j < input.size(); j++) //lenght of sequence
{
mean += input[j][i];
}
for (size_t j = 0; j < input.size(); j++) //lenght of sequence
{
input[j][i] = input[j][i] / mean;
}
}
vtr2<double> help::normalize(vtr2<double> const &input, double coef)
{
vtr2<double> output(input.size());
for (size_t i = 0; i < input.size(); i++) //dims
{
vtr<double> el(input[i].size());
for (size_t j = 0; j < input[i].size(); j++) //lenght of sequence
{
el[j] = input[i][j] * coef;
}
output[i] = el;
}
return output;
}
void help::normalizeZeroOne(vtr3<double> &input, double max)
for (size_t i = 0; i < input.size(); i++)
{
for (size_t j = 0; j < input[i].size(); j++)
{
for (size_t k = 0; k < input[i][j].size(); k++)
{
input[i][j][k] /= max;
}
}
}
vtr3<double> help::separateSequence(vtr3<double> const &input, int size)
{
auto tmp = separateSequenceOne(input[i]);
output.insert(output.end(), tmp.begin(), tmp.end());
}
vtr3<double> help::separateSequenceOne(vtr2<double> const &input)
vtr3<double> output;
const size_t dims = input[0].size();
for (size_t i = 0; i < dims; i++)
{
vtr2<double> sequence;
sequence.reserve(input.size());
for (size_t j = 0; j < input.size(); j++)
{
vector<double> el(1);
el[0] = input[j][i];
sequence.push_back(el);
}
output.push_back(sequence);
}
return output;
void help::reduce(vtr3<double> &input, int skip)
for (size_t i = 0; i < input.size(); i++)
{
vtr2<double> row;
for (size_t j = skip - 1; j < input[i].size(); j += skip)
{
row.push_back(input[i][j]);
}
input[i] = row;
}
vtr3<double> help::paa(vtr3<double> const &input, int ratio)
vtr3<double> output(input.size());
for (size_t i = 0; i < input.size(); i++)
{
vtr2<double> s;
for (size_t j = 0; j < input[i].size(); j+= ratio)// sequence
{
vector<double> dim(input[i][j].size());
const size_t end = j + ratio >= input[i].size() ? input[i].size() : j + ratio;
for (size_t k = 0; k < input[i][j].size(); k++) //all dims
{
double sum = 0;
int merged = 0;
for (size_t l = j; l < end; l++) //sum individual groups of dims
{
sum += input[i][l][k];
merged++;
}
dim[k] = sum / merged;
}
s.push_back(dim);
}
output[i] = s;
}
return output;
vtr3<double> help::smooth(vtr3<double> const & input, int width)
vtr3<double> output(input.size());
for (size_t i = 0; i < input.size(); i++)
{
const int dims = (int)input[0][0].size();
vtr2<double> s;
for (int j = 0; j < width - 1; j++)
{
s.push_back(input[i][j]);
}
for (size_t j = 0; j < input[i].size() - width + 1; j++)// sequence
vtr<double> sums(dims);
for (int k = 0; k < width; k++) //all dims
{
sums[l] += input[i][j + k][l] / width;
}
}
s.push_back(sums);
}
output[i] = s;
}
return output;
std::string help::stripFileNameFromPath(std::string path)
{
string folder = path.substr(0, path.find_last_of("\\/"));
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<double> dis(min, max);
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(min, max);
return dis(gen);
}
vtr2<double> help::random_timeSeries(int size, int dims, int min, int max)
{
vtr2<double> ts(size);
for (size_t i = 0; i < size; i++)
{
vtr<double> point(dims);
for (size_t j = 0; j < dims; j++)
{
point[j] = help::random_real(min, max);
ts[i] = (point);
}
}
return ts;
}
//static double searchMax(vtr2<double> const &A, int idxStart, int idxEnd)
//{
// double max = numeric_limits<double>::min();
//
// for (size_t i = 0; i < A.size(); i++)
// {
// double sum = 0;
// for (size_t j = 0; j < A[i].size(); j++)
// {
// sum += A[i][j];
// }
//
// if (minA > sum)
// minA = sum;
// }
//}
//
//
//static double searchMin(int idxStart, int idxEnd)
//template<class T>
//void help::mark(node<T>** const &m, size_t row, size_t col)
//{
// for (size_t i = 1; i < row; i++)
// {
// for (size_t j = 1; j < col; j++)
// {
// if (m[i][j].size > m[i + 1][j].size && m[i][j].size > m[i][j + 1].size) {
// if (m[i + 1][j].size == m[i][j + 1].size)
// m[i][j].size++;
// }
// }
// }
//}