48Eigen::VectorX<ptrdiff_t>
sort(
49 const Eigen::DenseBase<DRaw> &v,
50 Eigen::DenseBase<DSort>
const &v_sorted_)
52 Eigen::VectorX<ptrdiff_t> idx =
sort(v);
54 Eigen::DenseBase<DSort>& v_sorted =
55 const_cast< Eigen::DenseBase<DSort>&
>(v_sorted_);
56 v_sorted = v(idx, Eigen::all);
68Eigen::VectorX<ptrdiff_t>
sort_rows(
const Eigen::DenseBase<D> &M){
71 Eigen::VectorX<ptrdiff_t> idx;
74 const ptrdiff_t& row1,
75 const ptrdiff_t& row2)->
bool
77 ptrdiff_t N = M.cols()-1;
78 for (ptrdiff_t col = 0; col < N; col++){
79 if (M(row1, col) < M(row2, col))
82 if (M(row1, col) > M(row2, col))
88 if (M(row1, Eigen::last) <= M(row2, Eigen::last))
94 detail::_sort(M.derived(), idx, cmp_fun);
106 const Eigen::DenseBase<DRaw> &M,
107 Eigen::DenseBase<DSort> &M_sorted_)
109 Eigen::VectorX<ptrdiff_t> idx =
sort_rows(M);
110 Eigen::DenseBase<DSort>& M_sorted =
111 const_cast< Eigen::DenseBase<DSort>&
>(M_sorted_);
112 M_sorted = M(idx, Eigen::all);
127 const Eigen::DenseBase<DRaw> &v,
128 Eigen::VectorX<TUval> &uvals,
129 Eigen::MatrixX2<ptrdiff_t> &uvals_from_size)
132 return Eigen::VectorX<ptrdiff_t>();
134 Eigen::VectorX<ptrdiff_t> idx =
sort(v);
136 uvals.resize(idx.size());
137 uvals_from_size.resize(idx.size(), Eigen::NoChange);
140 uvals(0) = v(idx(0));
141 uvals_from_size(0, 0) = 0;
142 uvals_from_size(0, 1) = 1;
145 for (ptrdiff_t i = 1; i < idx.size(); i++){
146 if (v(idx(i - 1)) == v(idx(i))){
147 uvals_from_size(ii, 1)++;
150 uvals(ii) = v(idx(i));
151 uvals_from_size(ii, 0) = i;
152 uvals_from_size(ii, 1) = 1;
155 uvals.conservativeResize(ii + 1);
156 uvals_from_size.conservativeResize(ii + 1, Eigen::NoChange);
168 const Eigen::DenseBase<DRaw> &v,
169 Eigen::VectorX<TUval> &uvals,
170 Eigen::MatrixX2<ptrdiff_t> &uvals_from_size,
171 Eigen::DenseBase<DSort>
const &v_sorted_)
173 Eigen::VectorX<ptrdiff_t> idx =
sort_unique(v, uvals, uvals_from_size);
174 Eigen::DenseBase<DSort>& v_sorted =
175 const_cast< Eigen::DenseBase<DSort>&
>(v_sorted_);
176 v_sorted = v(idx, Eigen::all);
193 const Eigen::DenseBase<DRaw> &M,
194 Eigen::MatrixX<TUval> &urows,
195 Eigen::MatrixX2<ptrdiff_t> &urows_from_size)
198 return Eigen::VectorX<ptrdiff_t>();
200 Eigen::VectorX<ptrdiff_t> idx =
sort_rows(M);
202 urows.resize(idx.size(), M.cols());
203 urows_from_size.resize(idx.size(), Eigen::NoChange);
206 urows.row(0) = M.row(idx(0));
207 urows_from_size(0, 0) = 0;
208 urows_from_size(0, 1) = 1;
211 for (ptrdiff_t i = 1; i < idx.size(); i++){
212 if (M.row(idx(i - 1)) == M.row(idx(i))){
213 urows_from_size(ii, 1)++;
216 urows.row(ii) = M.row(idx(i));
217 urows_from_size(ii, 0) = i;
218 urows_from_size(ii, 1) = 1;
221 urows.conservativeResize(ii + 1, Eigen::NoChange);
222 urows_from_size.conservativeResize(ii + 1, Eigen::NoChange);
234 const Eigen::DenseBase<DRaw> &M,
235 Eigen::MatrixX<TUval> &urows,
236 Eigen::MatrixX2<ptrdiff_t> &urows_from_size,
237 const Eigen::DenseBase<DSort> &M_sorted_)
239 Eigen::VectorX<ptrdiff_t> idx =
sort_rows_unique(M, urows, urows_from_size);
240 Eigen::DenseBase<DSort>& M_sorted =
241 const_cast< Eigen::DenseBase<DSort>&
>(M_sorted_);
242 M_sorted = M(idx, Eigen::all);
Eigen::VectorX< ptrdiff_t > sort_rows_unique(const Eigen::DenseBase< DRaw > &M, Eigen::MatrixX< TUval > &urows, Eigen::MatrixX2< ptrdiff_t > &urows_from_size)
sort_rows_unique find unique rows, sort them, identify unique rows start and end row-indexes and retu...
Definition h5sort.h:192
Eigen::VectorX< ptrdiff_t > sort_unique(const Eigen::DenseBase< DRaw > &v, Eigen::VectorX< TUval > &uvals, Eigen::MatrixX2< ptrdiff_t > &uvals_from_size)
sort_unique find unique elements, sort them, identify unique values start and end indexes and return ...
Definition h5sort.h:126