Advertisement
oster_man

Test efficiency

Jun 11th, 2023
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include "log_duration.h"
  2.  
  3. #include <iostream>
  4. #include <numeric>
  5. #include <algorithm>
  6. #include <random>
  7. #include <string>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. vector<float> ComputeAvgTempVar(const vector<vector<float>>& measures) {
  13.    
  14.     if (measures.empty()){
  15.         vector<float> result;
  16.         return result;
  17.     }
  18.     else{
  19.  
  20.     vector<float> result(measures[0].size());
  21.     auto iter=measures.begin();
  22.     auto days=measures.size();
  23.     while(iter!=measures.end()){
  24.         transform(result.begin(),result.end(),iter->begin(),result.begin(),plus<float>{});
  25.         ++iter;
  26.     }
  27.     for (auto& it:result){
  28.         it<0.f?it=0.f:it/=days;
  29.     }
  30.     return result;
  31.     }
  32. }
  33.  
  34. vector<float> ComputeAvgTempFunc(const vector<vector<float>>& measures) {
  35.    
  36.     if (measures.empty()){
  37.         vector<float> result;
  38.         return result;
  39.     }
  40.     else{
  41.  
  42.     vector<float> result(measures[0].size());
  43.     auto iter=measures.begin();
  44.     while(iter!=measures.end()){
  45.         transform(result.begin(),result.end(),iter->begin(),result.begin(),plus<float>{});
  46.         ++iter;
  47.     }
  48.     for (auto& it:result){
  49.         it<0.f?it=0.f:it/=measures.size();
  50.     }
  51.     return result;
  52.     }
  53. }
  54.  
  55. vector<float> GetRandomVector(int size) {
  56.     static mt19937 engine;
  57.     uniform_real_distribution<float> d(-100, 100);
  58.  
  59.     vector<float> res(size);
  60.     for (int i = 0; i < size; ++i) {
  61.         res[i] = d(engine);
  62.     }
  63.  
  64.     return res;
  65. }
  66.  
  67. int main() {
  68.     vector<vector<float>> data;
  69.     data.reserve(5000);
  70.  
  71.     for (int i = 0; i < 5000; ++i) {
  72.         data.push_back(GetRandomVector(5000));
  73.     }
  74.  
  75.     vector<float> avg;
  76.     for (int i=1;i<2;++i)
  77.     {
  78.         LOG_DURATION("ComputeAvgTemp (by var)"s);
  79.         avg = ComputeAvgTempVar(data);
  80.     }
  81.    
  82.     for (int i=1;i<2;++i)
  83.     {
  84.         LOG_DURATION("ComputeAvgTemp (by func)"s);
  85.         avg = ComputeAvgTempFunc(data);
  86.     }
  87.  
  88.     cout << "Total mean: "s << accumulate(avg.begin(), avg.end(), 0.f) / avg.size() << endl;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement