1#ifndef TATAMI_STATS_VARIANCE_HPP
2#define TATAMI_STATS_VARIANCE_HPP
13#include "sanisizer/sanisizer.hpp"
32template<
typename Output_ =
double>
64template<
typename Output_>
95template<
typename Value_,
typename Index_,
typename Output_>
97 const auto dim = (row ? mat.
nrow() : mat.
ncol());
98 const auto otherdim = (row ? mat.
ncol() : mat.
nrow());
100 nanable_ifelse<Value_>(
104 skip_nan::RssBuffers<Output_, Index_> tmp;
105 tmp.mean = output.mean;
106 tmp.rss = output.variance;
107 auto count = tatami::create_container_of_Index_size<std::vector<Index_> >(row ? mat.nrow() : mat.ncol());
108 tmp.count = count.data();
110 skip_nan::RssOptions ropt;
111 ropt.num_threads = opt.num_threads;
112 ropt.mean_placeholder = opt.mean_placeholder;
113 skip_nan::rss(row, mat, tmp, ropt);
115 for (Index_ i = 0; i < dim; ++i) {
117 output.variance[i] = opt.variance_placeholder;
119 output.variance[i] /= count[i] - 1;
125 RssBuffers<Output_> tmp;
126 tmp.mean = output.mean;
127 tmp.rss = output.variance;
130 ropt.num_threads = opt.num_threads;
131 ropt.mean_placeholder = opt.mean_placeholder;
132 rss(row, mat, tmp, ropt);
135 std::fill_n(output.variance, dim, opt.variance_placeholder);
137 for (Index_ i = 0; i < dim; ++i) {
138 output.variance[i] /= otherdim - 1;
150template<
typename Output_>
179template<
typename Output_ =
double,
typename Value_,
typename Index_>
182 const auto dim = (row ? mat.
nrow() : mat.
ncol());
184#ifdef TATAMI_STATS_TEST_DIRTY
189#ifdef TATAMI_STATS_TEST_DIRTY
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
constexpr Value_ nan_if_available_else_zero()
Functions to compute statistics from a tatami::Matrix.
Definition count.hpp:20
void variance(bool row, const tatami::Matrix< Value_, Index_ > &mat, VarianceBuffers< Output_ > &output, const VarianceOptions< Output_ > &opt)
Definition variance.hpp:96
void rss(bool row, const tatami::Matrix< Value_, Index_ > &mat, RssBuffers< Output_ > &output, const RssOptions< Output_ > &opt)
Definition rss.hpp:261
void resize_container_to_Index_size(Container_ &container, const Index_ x, Args_ &&... args)
Result buffers for variance().
Definition variance.hpp:65
Output_ * mean
Definition variance.hpp:70
Output_ * variance
Definition variance.hpp:76
Options for variance().
Definition variance.hpp:33
Output_ variance_placeholder
Definition variance.hpp:56
int num_threads
Definition variance.hpp:44
Output_ mean_placeholder
Definition variance.hpp:50
bool skip_nan
Definition variance.hpp:38
Results of variance().
Definition variance.hpp:151
std::vector< Output_ > variance
Definition variance.hpp:162
std::vector< Output_ > mean
Definition variance.hpp:156