1#ifndef TATAMI_STATS_MEDIANS_HPP
2#define TATAMI_STATS_MEDIANS_HPP
12#include "sanisizer/sanisizer.hpp"
13#include "quickstats/quickstats.hpp"
49template<
typename Output_ =
double,
typename Value_,
typename Index_>
50Output_ direct(Value_* ptr, Index_ num,
bool skip_nan) {
51 ::tatami_stats::internal::nanable_ifelse<Value_>(
54 auto lost = shift_nans(ptr, num);
61 return quickstats::median<Output_>(num, ptr);
64template<
typename Output_ =
double,
typename Value_,
typename Index_>
65Output_
direct(Value_* value, Index_ num_nonzero, Index_ num_all,
bool skip_nan) {
66 ::tatami_stats::internal::nanable_ifelse<Value_>(
69 auto lost = shift_nans(value, num_nonzero);
77 return quickstats::median<Output_>(num_all, num_nonzero, value);
98template<
typename Value_,
typename Index_,
typename Output_>
100 auto dim = (row ? mat.
nrow() : mat.
ncol());
101 auto otherdim = (row ? mat.
ncol() : mat.
nrow());
111 auto vbuffer = buffer.data();
112 for (Index_ x = 0; x < l; ++x) {
113 auto range = ext->fetch(vbuffer, NULL);
115 output[x + s] = direct<Output_>(vbuffer, range.number, otherdim, mopt.
skip_nan);
123 for (Index_ x = 0; x < l; ++x) {
124 auto ptr = ext->fetch(buffer.data());
126 output[x + s] = direct<Output_>(buffer.data(), otherdim, mopt.
skip_nan);
136template<
typename Value_,
typename Index_,
typename Output_>
138 apply(row, *p, output, mopt);
157template<
typename Output_ =
double,
typename Value_,
typename Index_>
160 apply(
false, mat, output.data(), mopt);
168template<
typename Output_ =
double,
typename Value_,
typename Index_>
173template<
typename Output_ =
double,
typename Value_,
typename Index_>
178template<
typename Output_ =
double,
typename Value_,
typename Index_>
199template<
typename Output_ =
double,
typename Value_,
typename Index_>
202 apply(
true, mat, output.data(), mopt);
210template<
typename Output_ =
double,
typename Value_,
typename Index_>
215template<
typename Output_ =
double,
typename Value_,
typename Index_>
220template<
typename Output_ =
double,
typename Value_,
typename Index_>
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
virtual std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(bool row, const Options &opt) const=0
void direct(const Value_ *ptr, Index_ num, const Group_ *group, std::size_t num_groups, const Index_ *group_size, Output_ *output_means, Output_ *output_variances, bool skip_nan, Index_ *valid_group_size)
Definition grouped_variances.hpp:107
Functions to compute statistics from a tatami::Matrix.
Definition counts.hpp:18
int parallelize(Function_ fun, const Index_ tasks, const int workers)
Value_ * copy_n(const Value_ *const input, const Size_ n, Value_ *const output)
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
Utilities for computing matrix statistics.