0

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

例如我有一组 ids { 1,2,3,4},现在如果我有两个集群并且两个集群有两个点,那么第一个集群的这两个点应该有 ids 1,2 和第二个一个 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()]); 

        }
    }
4

1 回答 1

1

I would write something like that:

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;
    }
}
于 2012-09-18T00:22:09.057 回答