0

DBScanアルゴリズムを使用して一連のポイントをクラスタリングしています。一連のポイントのIDのセットと、一連のクラスターがあり、各クラスターには一連のポイントがあります。クラスターとポイントIDを関連付けたいと思います。

たとえば、IDのセット{1,2,3,4}があります。ここで、2つのクラスターがあり、2つのクラスターに2つのポイントがある場合、最初のクラスターのこれら2つのポイントにはID 1,2があり、2番目のクラスターにはIDが必要です。 1つ3,4。また、4つのクラスターがあり、各クラスターに1つのポイントがある場合、ポイントのIDは1、2、3、および4になります。さらに、2つのクラスターがあるが、1つのクラスターに3つのポイントがあり、もう1つのクラスターに1つのポイントがある場合の場合、ポイントのIDは、最初のクラスターのポイントでは1、2、3であり、2番目のクラスターのポイントでは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

私はそのようなものを書くでしょう:

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 に答える