Advertisement
VinnRonn

ComputeAvgTemp

Sep 1st, 2022
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include "log_duration.h"
  2.  
  3. #include <iostream>
  4. #include <numeric>
  5. #include <random>
  6. #include <string>
  7. #include <vector>
  8. #include <cassert>
  9.  
  10. using namespace std;
  11.  
  12. vector<float> ComputeAvgTemp(const vector<vector<float>>& measures) {
  13. // место для вашего решения
  14. size_t m = measures.size();
  15. size_t n = measures[0].size();
  16.  
  17. vector<float> result(n);
  18. vector<float> sum(n);
  19. vector<int> count(n);
  20. if (measures.empty()) {
  21. return {};
  22. }
  23.  
  24. for (int j = 0; j < m; ++j) {
  25.  
  26. for (int i = 0; i < n; ++i) {
  27. float temp = measures[j][i];
  28. sum[i] += (temp > 0 ? temp : 0);
  29. //cerr << sum[i] << " ";
  30. count[i] += (temp > 0 ? 1 : 0);
  31. //cerr << temp << endl;
  32. }
  33. //cerr << endl;
  34.  
  35. }
  36. for (int i = 0; i < n; ++i) {
  37. //cerr << counts[i] << " ";
  38. cerr << result.size() << " ";
  39. result[i] = (count[i] > 0 ? sum[i] / count[i] : 0);
  40. //cerr << result[i] << "_";
  41. }
  42.  
  43. return result;
  44. }
  45.  
  46. vector<float> GetRandomVector(int size) {
  47. static mt19937 engine;
  48. uniform_real_distribution<float> d(-100, 100);
  49.  
  50. vector<float> res(size);
  51. for (int i = 0; i < size; ++i) {
  52. res[i] = d(engine);
  53. }
  54.  
  55. return res;
  56. }
  57.  
  58. void Test() {
  59. // 4 дня по 3 измерения
  60. vector<vector<float>> v = {
  61. //{0, -1, -1},
  62. //{1, -2, -2},
  63. //{2, 3, -3},
  64. //{3, 4, -4}
  65.  
  66. };
  67.  
  68. // среднее для 0-го измерения (1+2+3) / 3 = 2 (не учитывам 0)
  69. // среднее для 1-го измерения (3+4) / 2 = 3.5 (не учитывам -1, -2)
  70. // среднее для 2-го не определено (все температуры отрицательны), поэтому должен быть 0
  71.  
  72. //assert(ComputeAvgTemp(v) == vector<float>({ 2, 3.5f, 0 }));
  73. assert(ComputeAvgTemp(v) == vector<float>{});
  74. }
  75.  
  76. int main() {
  77. Test();
  78.  
  79. vector<vector<float>> data;
  80. data.reserve(5000);
  81.  
  82. for (int i = 0; i < 5000; ++i) {
  83. data.push_back(GetRandomVector(5000));
  84. }
  85.  
  86. vector<float> avg;
  87. {
  88. LOG_DURATION("ComputeAvgTemp"s);
  89. avg = ComputeAvgTemp(data);
  90. }
  91.  
  92. cout << "Total mean: "s << accumulate(avg.begin(), avg.end(), 0.f) / avg.size() << endl;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement