24 for (
const auto& inner : window) {
27 return sum / window.size();
30 return std::accumulate(window.begin(), window.end(), 0.0) / window.size();
34 return static_cast<double>(window);
39 std::function<T(
const std::vector<T>&)> window_func) {
41 std::vector<T> results;
43 std::vector<T> window(data.begin() + i, data.begin() + i +
window_size_);
44 results.push_back(window_func(window));
50 std::function<T(
const std::vector<T>&)> window_func) {
51 std::vector<T> results;
54 std::vector<T> window(data.begin() + i, data.begin() + i +
window_size_);
55 results.push_back(window_func(window));
61 std::function<T(
const std::vector<T>&)> window_func) {
80 throw std::invalid_argument(
"Window size cannot be zero");
82 throw std::invalid_argument(
"Step size cannot be zero");
85 std::vector<T>
process(
const std::vector<T>& data,
86 std::function<T(
const std::vector<T>&)> window_func) {
105 throw std::invalid_argument(
"Window size cannot be zero");
110 throw std::invalid_argument(
"Step size cannot be zero");
120 if (window.empty()) {
123 return std::accumulate(window.begin(), window.end(), T{}) /
static_cast<T
>(window.size());
127 if (window.empty()) {
128 throw std::invalid_argument(
"Cannot compute median of empty window");
130 std::sort(window.begin(), window.end());
131 return window[window.size() / 2];
135 if (window.empty()) {
136 throw std::invalid_argument(
"Cannot compute max of empty window");
138 return *std::max_element(window.begin(), window.end());
142 if (window.empty()) {
143 throw std::invalid_argument(
"Cannot compute min of empty window");
145 return *std::min_element(window.begin(), window.end());
std::vector< T > process(const std::vector< T > &data, std::function< T(const std::vector< T > &)> window_func)
SlidingWindowProcessor(size_t window_size, size_t step_size)
void set_window_size(size_t size)
std::vector< T > process_single_dimensional(const std::vector< T > &data, std::function< T(const std::vector< T > &)> window_func)
std::vector< T > process_multidimensional(const std::vector< T > &data, std::function< T(const std::vector< T > &)> window_func)
static double compute_window_feature(const U &window)
size_t get_window_size() const
std::vector< T > process_window(const std::vector< T > &data, std::function< T(const std::vector< T > &)> window_func)
size_t get_step_size() const
void set_step_size(size_t size)
static T moving_median(std::vector< T > window)
static T moving_average(const std::vector< T > &window)
static T moving_max(const std::vector< T > &window)
static T moving_min(const std::vector< T > &window)