群集和点之间的关联
Correlating between Cluster and Points
我正在使用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;
}
}
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 群集和点之间的关联
- 3个类别之间的关联
- 其中是程序集和cpp代码之间的一对一关联
- 两个类之间的双向关联