1#ifndef TATAMI_STATS__SUMS_HPP
2#define TATAMI_STATS__SUMS_HPP
58template<
typename Output_ =
double,
typename Value_,
typename Index_>
59Output_
direct(
const Value_* ptr, Index_ num,
bool skip_nan) {
60 return internal::nanable_ifelse_with_value<Value_>(
64 for (Index_ i = 0; i < num; ++i) {
66 if (!std::isnan(val)) {
73 return std::accumulate(ptr, ptr + num,
static_cast<Output_
>(0));
95template<
typename Output_,
typename Value_,
typename Index_>
104 RunningDense(Index_ num, Output_* sum,
bool skip_nan) : my_num(num), my_sum(sum), my_skip_nan(skip_nan) {}
110 void add(
const Value_* ptr) {
111 internal::nanable_ifelse<Value_>(
114 for (Index_ i = 0; i < my_num; ++i) {
116 if (!std::isnan(val)) {
122 for (Index_ i = 0; i < my_num; ++i) {
146template<
typename Output_,
typename Value_,
typename Index_>
158 my_sum(sum), my_skip_nan(skip_nan), my_subtract(subtract) {}
167 void add(
const Value_* value,
const Index_* index, Index_ number) {
168 internal::nanable_ifelse<Value_>(
171 for (Index_ i = 0; i < number; ++i) {
173 if (!std::isnan(val)) {
174 my_sum[index[i] - my_subtract] += val;
179 for (Index_ i = 0; i < number; ++i) {
180 my_sum[index[i] - my_subtract] += value[i];
211template<
typename Value_,
typename Index_,
typename Output_>
213 auto dim = (row ? mat.
nrow() : mat.
ncol());
214 auto otherdim = (row ? mat.
ncol() : mat.
nrow());
225 for (Index_ x = 0; x < l; ++x) {
226 auto out = ext->fetch(vbuffer.data(), NULL);
243 for (Index_ x = 0; x < otherdim; ++x) {
244 auto out = ext->fetch(vbuffer.data(), ibuffer.data());
245 runner.
add(out.value, out.index, out.number);
248 local_output.transfer();
257 for (Index_ x = 0; x < l; ++x) {
258 auto out = ext->fetch(buffer.data());
271 for (Index_ x = 0; x < otherdim; ++x) {
272 auto out = ext->fetch(buffer.data());
276 local_output.transfer();
288template<
typename Value_,
typename Index_,
typename Output_>
290 apply(row, *p, output, sopt);
308template<
typename Output_ =
double,
typename Value_,
typename Index_>
311 apply(
false, mat, output.data(), sopt);
319template<
typename Output_ =
double,
typename Value_,
typename Index_>
324template<
typename Output_ =
double,
typename Value_,
typename Index_>
329template<
typename Output_ =
double,
typename Value_,
typename Index_>
349template<
typename Output_ =
double,
typename Value_,
typename Index_>
352 apply(
true, mat, output.data(), sopt);
360template<
typename Output_ =
double,
typename Value_,
typename Index_>
365template<
typename Output_ =
double,
typename Value_,
typename Index_>
370template<
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:93
Running sums from dense data.
Definition sums.hpp:96
void add(const Value_ *ptr)
Definition sums.hpp:110
RunningDense(Index_ num, Output_ *sum, bool skip_nan)
Definition sums.hpp:104
Running sums from sparse data.
Definition sums.hpp:147
void add(const Value_ *value, const Index_ *index, Index_ number)
Definition sums.hpp:167
RunningSparse(Output_ *sum, bool skip_nan, Index_ subtract=0)
Definition sums.hpp:157
std::vector< Output_ > by_row(const tatami::Matrix< Value_, Index_ > &mat, const Options &sopt)
Definition sums.hpp:350
void apply(bool row, const tatami::Matrix< Value_, Index_ > &mat, Output_ *output, const Options &sopt)
Definition sums.hpp:212
std::vector< Output_ > by_column(const tatami::Matrix< Value_, Index_ > &mat, const Options &sopt)
Definition sums.hpp:309
Output_ direct(const Value_ *ptr, Index_ num, bool skip_nan)
Definition sums.hpp:59
Functions to compute statistics from a tatami::Matrix.
Definition counts.hpp:18
void parallelize(Function_ fun, const Index_ tasks, const int threads)
Container_ create_container_of_Index_size(const Index_ x, Args_ &&... args)
auto consecutive_extractor(const Matrix< Value_, Index_ > &matrix, const bool row, const Index_ iter_start, const 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.