-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
93 lines (72 loc) · 3.06 KB
/
main.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream> //cout cin etc.
#include "include/owndata.hpp"//Eigene Datenvorbereitungsbib
#include <torch/torch.h> //torchlib
#include <numeric> // accumulate & inner_product
#include <cmath> //sqrt()
#include <functional> //reference_wrapper
double stdfunc1(std::vector<std::reference_wrapper<double>> const &invector);
int main() {
OwnData test("input.csv","output.csv");
std::cout << "Shapeprint x2data: " << std::endl;
for ( const auto &row : test.x2data )
{
for ( const auto &s : row ) std::cout << s << ' ';
std::cout << std::endl;
}
std::cout << "Shapeprint y2data: " << std::endl;
for ( const auto &row : test.y2data )
{
for ( const auto &s : row ) std::cout << s << ' ';
std::cout << std::endl;
}
//test der referenz vector methode:
std::vector<std::reference_wrapper<double>> colvec0;
colvec0.reserve(test.x2data.size());
for (int i(0); i< test.x2data.size(); ++i) colvec0.push_back(test.x2data[i][0]);
std::cout << "-------------- col0: "<<std::endl;
std::cout << colvec0 << std::endl;
//test der std funktion:
std::vector<double> testv {6,3,2,9,11,44,20};
std::vector<std::reference_wrapper<double>> testvref;
for (int j(0); j<testv.size(); j++) testvref.push_back(testv[j]);
double stdw = stdfunc1(testvref);
std::cout << "Standardabw: " << stdw << std::endl;
//test der normalisierung von 2D Vectoren:
std::cout << "Ab hier Std von 2D vectoren: " << std::endl;
std::vector<std::vector<double>> std2dvector{{8,20,8},{10,15,10},{15,10,15},{20,8,20}};
std::cout << "\ntest vector vor normalisierung: " << std::endl;
for ( const auto &row : std2dvector )
{
for ( const auto &s : row ) std::cout << s << ' ';
std::cout << std::endl;
}
std::vector<std::reference_wrapper<double>> colvec;
colvec.reserve(std2dvector.size());
for(int coliterator(0); coliterator < std2dvector.front().size(); coliterator++) {
for (int i(0); i< std2dvector.size(); i++) {
colvec.push_back(std2dvector[i][coliterator]);
}
double stddev = stdfunc1(colvec);
double mean = std::accumulate(colvec.begin(), colvec.end(), 0.0) / colvec.size();
for (int rowcalit(0); rowcalit < std2dvector.size(); rowcalit++) {
std2dvector[rowcalit][coliterator] = ((std2dvector[rowcalit][coliterator])-mean) / stddev;
}
//erase all values from ref vector
colvec.clear();
}
std::cout << "\nvector nach normalisierung: " << std::endl;
for ( const auto &row : std2dvector )
{
for ( const auto &s : row ) std::cout << s << ' ';
std::cout << std::endl;
}
return 0;
}
//-------Standardabweichung Funktion-------
double stdfunc1(std::vector<std::reference_wrapper<double>> const & invector) {
double mean = std::accumulate(invector.begin(), invector.end(), 0.0) / invector.size();
double sq_sum = std::inner_product(invector.begin(), invector.end(), invector.begin(), 0.0,
[](double const & x, double const & y) {return x+y;},
[mean](double const & x, double const & y) {return (x-mean)*(y-mean);});
return std::sqrt(sq_sum / (invector.size() - 1));
}