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

◆ skewness()

std::vector< double > MayaFlux::Kinesis::Discrete::skewness ( std::span< const double >  data,
size_t  n_windows,
uint32_t  hop_size,
uint32_t  window_size 
)

Skewness (standardised third central moment) per window.

Returns 0 when variance is below epsilon rather than branching on zero.

Definition at line 259 of file Analysis.cpp.

260{
261 std::vector<double> out(n_windows);
262 std::vector<size_t> idx(n_windows);
263 std::iota(idx.begin(), idx.end(), 0);
264
265 Parallel::for_each(Parallel::par_unseq, idx.begin(), idx.end(),
266 [&](size_t i) {
267 const size_t start = i * hop_size;
268 auto w = data.subspan(start, std::min<size_t>(window_size, data.size() - start));
269 if (w.size() < 2) {
270 out[i] = 0.0;
271 return;
272 }
273 double s = 0.0;
274 for (double v : w)
275 s += v;
276 const double m = s / static_cast<double>(w.size());
277 double sq = 0.0, cb = 0.0;
278 for (double v : w) {
279 const double d = v - m;
280 const double d2 = d * d;
281 sq += d2;
282 cb += d2 * d;
283 }
284 const double var = sq / static_cast<double>(w.size());
285 const double sd = std::sqrt(std::max(var, k_epsilon));
286 out[i] = (cb / static_cast<double>(w.size())) / (sd * sd * sd);
287 });
288
289 return out;
290}

References skewness().

Referenced by skewness().

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