Соотношение между кластером и точками

Я кластеризовал множество точек, используя алгоритм DBScan. У меня есть набор идентификаторов для набора точек, и у меня есть набор кластеров, где каждый кластер имеет набор точек.
Я хотел бы коррелировать между кластерами и ID точек.

Например, у меня есть набор идентификаторов {1,2,3,4}, теперь, если у меня есть два кластера и два кластера имеет две точки, то эти две точки первого кластера должны иметь идентификаторы 1,2 и для второго один 3,4. Кроме того, если у меня есть 4 кластера, и у каждого кластера есть одна точка, то идентификаторы точек должны быть 1,2,3 и 4. Кроме того, если у меня есть два кластера, но один кластер имеет 3 точки, а другой — одну точку , то идентификаторы точек должны быть 1,2,3 для точек первого кластера и для точки второго кластера 4.

Я пытался закодировать его, но я остановился на вычислении формулы для достижения этого сценария.

std::vector<int>_IDs;
// for each cluster
for( int j = 0; j<clusters.size();j++ )
{
// for each point in that cluster
for ( int i=0; i < clusters[j].m_Points.size(); i++)
{
// assign its ID from the _IDs array based and save it in Clusters Vector
clusters[j].m_IDs.push_back(_IDs[j+ i*clusters[j].m_Points.size()]);

}
}

0

Решение

Я бы написал что-то вроде этого:

std::vector<int>_IDs; // those come in from wherever
std::vector<int>::const_iterator id = _IDs.begin();

// for each cluster
for( int j = 0; j<clusters.size(); ++j )
{
// for each point in that cluster
for ( int i=0; i < clusters[j].m_Points.size(); i++)
{
// some external logic should take care that there are enough ids
// for all points in clusters. sanity check it here.
assert(id != _IDs.end());

// assign its ID from the _IDs array based and save it in Clusters Vector
clusters[j].m_IDs.push_back(*id);
++id;
}
}
1

Другие решения

Других решений пока нет …