1#ifndef KMEANS_TATAMI_HPP
2#define KMEANS_TATAMI_HPP
26template<
typename KData_,
typename TValue_,
typename TIndex_,
class Extractor_ = tatami::OracularDenseExtractor<TValue_, TIndex_> >
29 Extractor(std::unique_ptr<Extractor_> ext, TIndex_ ndim) : my_ext(std::move(ext)) {
31 if constexpr(!same_type) {
37 std::unique_ptr<Extractor_> my_ext;
38 std::vector<TValue_> my_buffer;
39 static constexpr bool same_type = std::is_same<TValue_, KData_>::value;
40 typename std::conditional<same_type, bool, std::vector<KData_> > my_output;
43 const KData_* next() {
44 auto ptr = my_ext->fetch(my_buffer.data());
45 if constexpr(same_type) {
48 std::copy_n(ptr, my_buffer.size(), my_output.data());
49 return my_output.data();
71template<
typename KIndex_,
typename KData_,
typename TValue_,
typename TIndex_,
class MatrixPo
inter_ = std::shared_ptr<const tatami::Matrix<TValue_, TIndex_> > >
74 MatrixPointer_ my_matrix;
85 Matrix(MatrixPointer_ matrix,
bool transposed) : my_matrix(std::move(matrix)), my_transposed(transposed) {
88 cur_nobs = my_matrix->nrow();
89 my_ndim = my_matrix->ncol();
91 cur_nobs = my_matrix->ncol();
92 my_ndim = my_matrix->nrow();
97 my_nobs = sanisizer::cast<KIndex_>(sanisizer::attest_gez(sanisizer::attest_max_by_type<std::size_t>(cur_nobs)));
100 KIndex_ num_observations()
const {
104 std::size_t num_dimensions()
const {
109 std::unique_ptr<knncolle::MatrixExtractor<KData_> > new_extractor()
const {
118 return std::make_unique<Extractor<KData_, TValue_, TIndex_> >(std::move(ext), my_ndim);
knncolle-compatible wrapper around a tatami matrix.
Definition knncolle_tatami.hpp:72
auto new_known_extractor() const
Definition knncolle_tatami.hpp:116
Matrix(MatrixPointer_ matrix, bool transposed)
Definition knncolle_tatami.hpp:85
Wrapper around a tatami matrix.
void resize_container_to_Index_size(Container_ &container, 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)