tatami_stats
Matrix statistics for tatami
Loading...
Searching...
No Matches
variance.hpp
Go to the documentation of this file.
1#ifndef TATAMI_STATS_VARIANCE_HPP
2#define TATAMI_STATS_VARIANCE_HPP
3
4#include <vector>
5#include <cmath>
6#include <numeric>
7#include <limits>
8#include <algorithm>
9#include <cstddef>
10#include <optional>
11
12#include "tatami/tatami.hpp"
13#include "sanisizer/sanisizer.hpp"
14#include "quickstats/quickstats.hpp"
15
16#include "rss.hpp"
17#include "skip_nan/rss.hpp"
18#include "utils.hpp"
19
26namespace tatami_stats {
27
36 bool skip_nan = false;
37
42 int num_threads = 1;
43};
44
51template<typename Output_>
57 Output_* mean;
58
63 Output_* variance;
64};
65
83template<typename Value_, typename Index_, typename Output_>
85 const auto dim = (row ? mat.nrow() : mat.ncol());
86 nanable_ifelse<Value_>(
87 opt.skip_nan,
88 [&]() -> void {
89 skip_nan::RssBuffers<Output_, Index_> tmp;
90 tmp.mean = output.mean;
91 tmp.rss = output.variance;
92 auto count = tatami::create_container_of_Index_size<std::vector<Index_> >(row ? mat.nrow() : mat.ncol());
93 tmp.count = count.data();
94 skip_nan::RssOptions ropt;
95 ropt.num_threads = opt.num_threads;
96 skip_nan::rss(row, mat, tmp, ropt);
97 quickstats::rss_to_variance(dim, count.data(), output.variance);
98 },
99 [&]() -> void {
100 RssBuffers<Output_> tmp;
101 tmp.mean = output.mean;
102 tmp.rss = output.variance;
103 RssOptions ropt;
104 ropt.num_threads = opt.num_threads;
105 rss(row, mat, tmp, ropt);
106 const auto otherdim = (row ? mat.ncol() : mat.nrow());
107 quickstats::rss_to_variance(dim, otherdim, output.variance);
108 }
109 );
110}
111
118template<typename Output_>
124 std::vector<Output_> mean;
125
130 std::vector<Output_> variance;
131};
132
148template<typename Output_ = double, typename Value_, typename Index_>
151 const auto dim = (row ? mat.nrow() : mat.ncol());
153#ifdef TATAMI_STATS_TEST_DIRTY
154 , -1
155#endif
156 );
158#ifdef TATAMI_STATS_TEST_DIRTY
159 , -1
160#endif
161 );
162
164 buffers.mean = output.mean.data();
165 buffers.variance = output.variance.data();
166
167 variance(row, mat, buffers, opt);
168 return output;
169}
170
171}
172
173#endif
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
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 &opt)
Definition variance.hpp:84
void resize_container_to_Index_size(Container_ &container, const Index_ x, Args_ &&... args)
Compute row and column residual sum of squares from a tatami::Matrix.
Compute row and column residual sum of squares after skipping NaNs.
Result buffers for variance().
Definition variance.hpp:52
Output_ * mean
Definition variance.hpp:57
Output_ * variance
Definition variance.hpp:63
Options for variance().
Definition variance.hpp:31
bool skip_nan
Definition variance.hpp:36
int num_threads
Definition variance.hpp:42
Results of variance().
Definition variance.hpp:119
std::vector< Output_ > variance
Definition variance.hpp:130
std::vector< Output_ > mean
Definition variance.hpp:124