arma_warn_unused inline Col<uword> find(const SpBase<typename T1::elem_type,T1>& X, const uword k = 0) { arma_extra_debug_sigprint(); const SpProxy<T1> P(X.get_ref()); const uword n_rows = P.get_n_rows(); const uword n_nz = P.get_n_nonzero(); Mat<uword> tmp(n_nz,1); uword* tmp_mem = tmp.memptr(); typename SpProxy<T1>::const_iterator_type it = P.begin(); for(uword i=0; i<n_nz; ++i) { const uword index = it.row() + it.col()*n_rows; tmp_mem[i] = index; ++it; } Col<uword> out; const uword count = (k == 0) ? uword(n_nz) : uword( (std::min)(n_nz, k) ); out.steal_mem_col(tmp, count); return out; }
arma_warn_unused inline Col<uword> find_nonfinite(const SpBase<typename T1::elem_type,T1>& X) { arma_extra_debug_sigprint(); const SpProxy<T1> P(X.get_ref()); const uword n_rows = P.get_n_rows(); const uword n_nz = P.get_n_nonzero(); Mat<uword> tmp(n_nz,1); uword* tmp_mem = tmp.memptr(); typename SpProxy<T1>::const_iterator_type it = P.begin(); uword count = 0; for(uword i=0; i<n_nz; ++i) { if(arma_isfinite(*it) == false) { const uword index = it.row() + it.col()*n_rows; tmp_mem[count] = index; ++count; } ++it; } Col<uword> out; if(count > 0) { out.steal_mem_col(tmp, count); } return out; }