1#ifndef MUMOSA_SIMPLE_HPP
2#define MUMOSA_SIMPLE_HPP
13#include "tatami_stats/tatami_stats.hpp"
14#include "sanisizer/sanisizer.hpp"
58template<
typename Index_,
typename Distance_>
59std::pair<Distance_, Distance_>
compute_distance(
const Index_ num_cells, Distance_*
const distances) {
60 const Distance_ med = tatami_stats::medians::direct(distances, num_cells,
false);
62 for (Index_ i = 0; i < num_cells; ++i) {
63 const auto d = distances[i];
66 rmsd = std::sqrt(rmsd);
67 return std::make_pair(med, rmsd);
88template<
typename Index_,
typename Input_,
typename Distance_>
91 Distance_*
const distances,
98 const auto searcher = prebuilt.initialize();
99 std::vector<Distance_> cur_distances;
100 for (Index_ i = start, end = start + length; i < end; ++i) {
101 searcher->search(i, capped_k, NULL, &cur_distances);
102 if (cur_distances.size()) {
103 distances[i] = cur_distances.back();
131template<
typename Index_,
typename Input_,
typename Distance_,
class Matrix_ = knncolle::Matrix<Index_, Input_> >
133 const std::size_t num_dim,
134 const Index_ num_cells,
135 const Input_*
const data,
139 auto dist = sanisizer::create<std::vector<Distance_> >(num_cells);
std::unique_ptr< Prebuilt< Index_, Data_, Distance_ > > build_unique(const Matrix_ &data) const
virtual Index_ num_observations() const=0
void parallelize(int num_workers, Task_ num_tasks, Run_ run_task_range)
int cap_k(int k, Index_ num_observations)
Scale multi-modal embeddings to adjust for differences in variance.
Definition blocked.hpp:20
std::pair< Distance_, Distance_ > compute_distance(const Index_ num_cells, Distance_ *const distances)
Definition simple.hpp:59
Options for compute_distance().
Definition simple.hpp:28
int num_threads
Definition simple.hpp:40
int num_neighbors
Definition simple.hpp:34