Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "log_duration.h"
- #include <iostream>
- #include <numeric>
- #include <random>
- #include <string>
- #include <vector>
- #include <cassert>
- using namespace std;
- vector<float> ComputeAvgTemp(const vector<vector<float>>& measures) {
- // место для вашего решения
- size_t m = measures.size();
- size_t n = measures[0].size();
- vector<float> result(n);
- vector<float> sum(n);
- vector<int> count(n);
- if (measures.empty()) {
- return {};
- }
- for (int j = 0; j < m; ++j) {
- for (int i = 0; i < n; ++i) {
- float temp = measures[j][i];
- sum[i] += (temp > 0 ? temp : 0);
- //cerr << sum[i] << " ";
- count[i] += (temp > 0 ? 1 : 0);
- //cerr << temp << endl;
- }
- //cerr << endl;
- }
- for (int i = 0; i < n; ++i) {
- //cerr << counts[i] << " ";
- cerr << result.size() << " ";
- result[i] = (count[i] > 0 ? sum[i] / count[i] : 0);
- //cerr << result[i] << "_";
- }
- return result;
- }
- vector<float> GetRandomVector(int size) {
- static mt19937 engine;
- uniform_real_distribution<float> d(-100, 100);
- vector<float> res(size);
- for (int i = 0; i < size; ++i) {
- res[i] = d(engine);
- }
- return res;
- }
- void Test() {
- // 4 дня по 3 измерения
- vector<vector<float>> v = {
- //{0, -1, -1},
- //{1, -2, -2},
- //{2, 3, -3},
- //{3, 4, -4}
- };
- // среднее для 0-го измерения (1+2+3) / 3 = 2 (не учитывам 0)
- // среднее для 1-го измерения (3+4) / 2 = 3.5 (не учитывам -1, -2)
- // среднее для 2-го не определено (все температуры отрицательны), поэтому должен быть 0
- //assert(ComputeAvgTemp(v) == vector<float>({ 2, 3.5f, 0 }));
- assert(ComputeAvgTemp(v) == vector<float>{});
- }
- int main() {
- Test();
- vector<vector<float>> data;
- data.reserve(5000);
- for (int i = 0; i < 5000; ++i) {
- data.push_back(GetRandomVector(5000));
- }
- vector<float> avg;
- {
- LOG_DURATION("ComputeAvgTemp"s);
- avg = ComputeAvgTemp(data);
- }
- cout << "Total mean: "s << accumulate(avg.begin(), avg.end(), 0.f) / avg.size() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement