MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ variance()

std::vector< double > MayaFlux::Kinesis::Discrete::variance ( std::span< const double >  data,
size_t  n_windows,
uint32_t  hop_size,
uint32_t  window_size,
bool  sample_variance = true 
)

Variance per window.

Parameters
sample_varianceIf true, divides by (N-1); otherwise by N

Definition at line 219 of file Analysis.cpp.

220{
221 std::vector<double> out(n_windows);
222 std::vector<size_t> idx(n_windows);
223 std::iota(idx.begin(), idx.end(), 0);
224
225 Parallel::for_each(Parallel::par_unseq, idx.begin(), idx.end(),
226 [&](size_t i) {
227 const size_t start = i * hop_size;
228 auto w = data.subspan(start, std::min<size_t>(window_size, data.size() - start));
229 if (w.size() <= 1) {
230 out[i] = 0.0;
231 return;
232 }
233 double s = 0.0;
234 for (double v : w)
235 s += v;
236 const double m = s / static_cast<double>(w.size());
237 double sq = 0.0;
238 for (double v : w) {
239 double d = v - m;
240 sq += d * d;
241 }
242 const double div = sample_variance
243 ? static_cast<double>(w.size() - 1)
244 : static_cast<double>(w.size());
245 out[i] = sq / div;
246 });
247
248 return out;
249}

References variance().

Referenced by std_dev(), and variance().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: