1#ifndef TATAMI_STATS__SUMS_HPP
2#define TATAMI_STATS__SUMS_HPP
57template<
typename Output_ =
double,
typename Value_,
typename Index_>
58Output_
direct(
const Value_* ptr, Index_ num,
bool skip_nan) {
59 return internal::nanable_ifelse_with_value<Value_>(
63 for (Index_ i = 0; i < num; ++i) {
65 if (!std::isnan(val)) {
72 return std::accumulate(ptr, ptr + num,
static_cast<Output_
>(0));
93template<
typename Output_,
typename Value_,
typename Index_>
102 RunningDense(Index_ num, Output_* sum,
bool skip_nan) : my_num(num), my_sum(sum), my_skip_nan(skip_nan) {}
108 void add(
const Value_* ptr) {
109 internal::nanable_ifelse<Value_>(
112 for (Index_ i = 0; i < my_num; ++i) {
114 if (!std::isnan(val)) {
120 for (Index_ i = 0; i < my_num; ++i) {
143template<
typename Output_,
typename Value_,
typename Index_>
155 my_sum(sum), my_skip_nan(skip_nan), my_subtract(subtract) {}
164 void add(
const Value_* value,
const Index_* index, Index_ number) {
165 internal::nanable_ifelse<Value_>(
168 for (Index_ i = 0; i < number; ++i) {
170 if (!std::isnan(val)) {
171 my_sum[index[i] - my_subtract] += val;
176 for (Index_ i = 0; i < number; ++i) {
177 my_sum[index[i] - my_subtract] += value[i];
207template<
typename Value_,
typename Index_,
typename Output_>
209 auto dim = (row ? mat.
nrow() : mat.
ncol());
210 auto otherdim = (row ? mat.
ncol() : mat.
nrow());
221 for (Index_ x = 0; x < l; ++x) {
222 auto out = ext->fetch(vbuffer.data(), NULL);
239 for (Index_ x = 0; x < otherdim; ++x) {
240 auto out = ext->fetch(vbuffer.data(), ibuffer.data());
241 runner.
add(out.value, out.index, out.number);
244 local_output.transfer();
253 for (Index_ x = 0; x < l; ++x) {
254 auto out = ext->fetch(buffer.data());
267 for (Index_ x = 0; x < otherdim; ++x) {
268 auto out = ext->fetch(buffer.data());
272 local_output.transfer();
284template<
typename Value_,
typename Index_,
typename Output_>
286 apply(row, *p, output, sopt);
303template<
typename Output_ =
double,
typename Value_,
typename Index_>
306 apply(
false, mat, output.data(), sopt);
314template<
typename Output_ =
double,
typename Value_,
typename Index_>
319template<
typename Output_ =
double,
typename Value_,
typename Index_>
324template<
typename Output_ =
double,
typename Value_,
typename Index_>
343template<
typename Output_ =
double,
typename Value_,
typename Index_>
346 apply(
true, mat, output.data(), sopt);
354template<
typename Output_ =
double,
typename Value_,
typename Index_>
359template<
typename Output_ =
double,
typename Value_,
typename Index_>
364template<
typename Output_ =
double,
typename Value_,
typename Index_>
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
virtual bool prefer_rows() const=0
virtual std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(bool row, const Options &opt) const=0
Local output buffer for running calculations.
Definition utils.hpp:82
Running sums from dense data.
Definition sums.hpp:94
void add(const Value_ *ptr)
Definition sums.hpp:108
RunningDense(Index_ num, Output_ *sum, bool skip_nan)
Definition sums.hpp:102
Running sums from sparse data.
Definition sums.hpp:144
void add(const Value_ *value, const Index_ *index, Index_ number)
Definition sums.hpp:164
RunningSparse(Output_ *sum, bool skip_nan, Index_ subtract=0)
Definition sums.hpp:154
std::vector< Output_ > by_row(const tatami::Matrix< Value_, Index_ > &mat, const Options &sopt)
Definition sums.hpp:344
void apply(bool row, const tatami::Matrix< Value_, Index_ > &mat, Output_ *output, const Options &sopt)
Definition sums.hpp:208
std::vector< Output_ > by_column(const tatami::Matrix< Value_, Index_ > &mat, const Options &sopt)
Definition sums.hpp:304
Output_ direct(const Value_ *ptr, Index_ num, bool skip_nan)
Definition sums.hpp:58
Functions to compute statistics from a tatami::Matrix.
Definition counts.hpp:18
void parallelize(Function_ fun, Index_ tasks, int threads)
Container_ create_container_of_Index_size(Index_ x, Args_ &&... args)
auto consecutive_extractor(const Matrix< Value_, Index_ > &matrix, bool row, Index_ iter_start, Index_ iter_length, Args_ &&... args)
bool sparse_extract_index
bool sparse_ordered_index
Summation options.
Definition sums.hpp:29
int num_threads
Definition sums.hpp:40
bool skip_nan
Definition sums.hpp:34
Utilities for computing matrix statistics.