群集和点之间的关联

Correlating between Cluster and Points

本文关键字:关联 之间 群集      更新时间:2023-10-16

我正在使用DBScan算法对一组点进行聚类。我有一组点的ID,还有一组簇,每个簇都有一组值。我想在集群和点ID之间进行关联。

例如,我有一组id{1,2,3,4},现在如果我有两个簇,两个簇有两个点,那么第一个簇的这两个点应该有id 1,2,对于第二个簇应该有id 3,4。此外,如果我有4个聚类,每个聚类都有一个点,那么这些点的Id应该是1、2、3和4。此外,如果我有两个聚类,但一个聚类有3个点,另一个聚类只有一个点,那么第一个聚类的点的点的Id应该是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()]); 
}
}

我会写这样的东西:

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;
}
}