Files
@ d99b1ddf4d24
Branch filter:
Location: AENC/switchchain/cpp/histogram.hpp - annotation
d99b1ddf4d24
1.2 KiB
text/x-c++hdr
Add MaTeX plot label to triangle-exponent plot
ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 | #pragma once
#include "exports.hpp"
#include <algorithm>
#include <vector>
// Histogram over integers with binsize 1
class Histogram {
public:
Histogram() : xmin(0) {}
~Histogram() {}
void reset() {
frequencies.clear();
xmin = 0;
}
void add(int sample) {
if (frequencies.empty()) {
xmin = sample;
frequencies.push_back(1);
return;
}
if (sample < xmin) {
int extra = xmin - sample;
frequencies.insert(frequencies.begin(), extra, 0);
xmin = sample;
frequencies.front()++;
return;
}
if (sample - xmin >= (int)frequencies.size()) {
int extra = sample - xmin - frequencies.size() + 1;
frequencies.insert(frequencies.end(), extra, 0);
frequencies.back()++;
return;
}
frequencies[sample - xmin]++;
}
// For exports
std::vector<std::pair<int, int>> getHistogram() const {
std::vector<std::pair<int, int>> histogram;
int i = xmin;
for (auto f : frequencies)
histogram.push_back({i++, f});
return histogram;
}
std::vector<int> frequencies;
int xmin;
};
|