Skip to content

Commit f325519

Browse files
authored
Average sko mode (#154)
1 parent 40a71fe commit f325519

File tree

12 files changed

+633
-126
lines changed

12 files changed

+633
-126
lines changed

common_utils/common_utils.cpp

Lines changed: 88 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <chrono>
1616
#include <ctime>
1717
#include <iomanip>
18+
#include <thread>
1819
//#STOP_GRAB_TO_INCLUDES_LIST
1920

2021
namespace dvs {
@@ -87,11 +88,11 @@ void openPlotlyHtml(const string& file_name) {
8788
openFileBySystem(file_name);
8889
}
8990

90-
void sleepMs(unsigned long milisec) {
91+
void sleepMicroSec(unsigned long microsec) {
9192
#ifdef _WIN32
92-
Sleep(milisec);
93+
std::this_thread::sleep_for(std::chrono::microseconds(microsec));
9394
#elif __linux__
94-
usleep(milisec * 1000);
95+
usleep(microsec);
9596
#endif
9697
}
9798

@@ -346,7 +347,7 @@ string vectorToString(const vector<double>& vec) {
346347
}
347348

348349
string makeUniqueDavisHtmlName() {
349-
350+
sleepMicroSec(1);
350351
string davis_dir;
351352
davis_dir = "./davis_htmls/";
352353
auto now = std::chrono::system_clock::now();
@@ -378,6 +379,89 @@ void transponeMatrix(std::vector<std::vector<double> >& matrix) {
378379
matrix = std::move(transposed);
379380
}
380381

382+
vector<double> calculateAverageVector(const vector<vector<double>>& vectors) {
383+
384+
if (vectors.empty()) {
385+
throw std::invalid_argument("Input vector of vectors is empty.");
386+
}
387+
388+
size_t vectorSize = vectors[0].size();
389+
for (const auto& vec : vectors) {
390+
if (vec.size() != vectorSize) {
391+
throw std::invalid_argument("All vectors must have the same size.");
392+
}
393+
}
394+
395+
std::vector<double> averageVector(vectorSize, 0.0);
396+
for (const auto& vec : vectors) {
397+
for (size_t i = 0; i < vectorSize; ++i) {
398+
averageVector[i] += vec[i];
399+
}
400+
}
401+
402+
for (double& value : averageVector) {
403+
value /= vectors.size();
404+
}
405+
406+
return averageVector;
407+
408+
}
409+
410+
411+
vector<double> calculateStandardDeviation(const vector<double>& mean,
412+
const vector<vector<double>>& data) {
413+
414+
std::vector<double> stddev(mean.size(), 0.0);
415+
int n = data.size();
416+
for (const auto& vec : data) {
417+
for (size_t i = 0; i < vec.size(); ++i) {
418+
double diff = vec[i] - mean[i];
419+
stddev[i] += diff * diff;
420+
}
421+
}
422+
for (size_t i = 0; i < stddev.size(); ++i) {
423+
stddev[i] = std::sqrt(stddev[i] / n);
424+
}
425+
return stddev;
426+
}
427+
428+
std::string reverseString(const std::string& input) {
429+
430+
std::stringstream ss(input);
431+
std::string item;
432+
std::vector<std::string> elements;
433+
434+
while (std::getline(ss, item, ',')) {
435+
elements.push_back(item);
436+
}
437+
438+
std::reverse(elements.begin(), elements.end());
439+
440+
std::string result;
441+
for (size_t i = 0; i < elements.size(); ++i) {
442+
result += elements[i];
443+
if (i < elements.size() - 1) {
444+
result += ',';
445+
}
446+
}
447+
448+
return result;
449+
}
450+
451+
452+
vector<double> doubleAndReverse(const vector<double>& input,
453+
const vector<double>& mean) {
454+
455+
vector<double> result(input.size(), 0);
456+
vector<double> minus_result = input;
457+
for (size_t i = 0; i < result.size(); ++i) {
458+
result[i] += mean[i] + input[i];
459+
minus_result[i] = mean[i] - input[i];
460+
}
461+
vector<double> reversed(minus_result.rbegin(), minus_result.rend());
462+
result.insert(result.end(), reversed.begin(), reversed.end());
463+
return result;
464+
}
381465

382466
//#STOP_GRAB_TO_DVS_NAMESPACE
383467
}; // namespace dvs

common_utils/common_utils.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include <fstream>
1111
#include <algorithm>
1212
#include <stdint.h>
13+
#include <numeric>
14+
#include <stdexcept>
1315
//#STOP_GRAB_TO_INCLUDES_LIST
1416

1517
namespace dvs {
@@ -37,7 +39,7 @@ bool saveStringToFile(const string& file_name,
3739

3840
void mayBeCreateJsWorkingFolder();
3941

40-
void sleepMs(unsigned long milisec);
42+
void sleepMicroSec(unsigned long microsec);
4143

4244
void openPlotlyHtml(const string& file_name);
4345

@@ -161,6 +163,16 @@ bool is_string_convertable_to_digit(const string& sample);
161163

162164
void transponeMatrix(std::vector<std::vector<double>>& matrix);
163165

166+
vector<double> calculateAverageVector(const vector<vector<double>>& vectors);
167+
168+
vector<double> calculateStandardDeviation(const vector<double>& mean,
169+
const vector<vector<double>>& data);
170+
171+
vector<double> doubleAndReverse(const vector<double>& input, const vector<double>& mean);
172+
173+
174+
std::string reverseString(const std::string& input);
175+
164176

165177
//#STOP_GRAB_TO_DVS_NAMESPACE
166178
}; // namespace dvs

0 commit comments

Comments
 (0)