| 126 | } |
| 127 | |
| 128 | std::list<VectorI> group_by_label(const MatrixFr& labels) { |
| 129 | std::map<int, std::vector<size_t> > groups; |
| 130 | const size_t num_entries = labels.rows(); |
| 131 | for (size_t i=0; i<num_entries; i++) { |
| 132 | int label = int(std::round(labels(i, 0))); |
| 133 | auto itr = groups.find(label); |
| 134 | if (itr == groups.end()) { |
| 135 | std::vector<size_t> group; |
| 136 | group.push_back(i); |
| 137 | groups.emplace(label, group); |
| 138 | } else { |
| 139 | itr->second.push_back(i); |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | std::list<VectorI> result; |
| 144 | for (const auto& group : groups) { |
| 145 | const size_t group_size = group.second.size(); |
| 146 | result.emplace_back(group_size); |
| 147 | std::copy(group.second.begin(), group.second.end(), |
| 148 | result.back().data()); |
| 149 | } |
| 150 | return result; |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | using namespace ParameterManagerHelper; |