我正在使用DBScan算法聚类一组点。我有一组点的ID,我有一组聚类,每个聚类都有一组点。 我想关联集群和点ID。
例如我有一组id {1,2,3,4},现在如果我有两个簇,两个簇有两个点,那么第一个簇的那两个点应该有id 1,2和第二个3,4。此外,如果我有4个簇并且每个簇有一个点,那么点的ID应该是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 :(得分: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;
}
}