使用Kmean找到具有最高数量元素的聚类
find the cluster of a highest number of elements using Kmean?
我使用kmean函数将8-D向量聚类为一组聚类,如下所示:
kmeans(Vectors, clusterCount, labels, TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 100, 2), 10, KMEANS_PP_CENTERS, centers);
对我来说,最成功的集群是包含更多向量的集群。所以我的问题是如何找到种群数量最多的集群?标签param是每个向量所属的一个指示符,我觉得如果我用它来找到频率,它将消耗一段时间。有人能提出一个主意吗?
传统上,我是这样做的:
int max = -1;int index = -1;
vector<int> classes;
classes.resize(clusterCount);
for (int i=0;i<labels.rows;i++)
{
int idx = labels.at<int>(i,0);
classes[idx]++;
if (classes[idx] > max)
{
max = classes[idx];
index = idx;
}
}
有比这更快的解决方案吗?
我正在寻找相同的代码,但还没有发现任何实质性的不同,但是你可以加快你的代码:
- 不要每次都更新您的最大值
- 避免使用中间变量(如
int idx
)
这是我的代码:
int classes[clusterCount];
memset(classes, 0, sizeof(classes[0]) * clusterCount);
int * labels_ptr = labels.ptr<int>(0);
for (int i = 0; i < labels.rows; ++i)
classes[*labels_ptr++]++;
for (int i = 0; i < clusterCount; ++i)
{
if (classes[i] > max)
{
max = count[i];
index = i;
}
}
这段代码的结果与您的相同,在我的电脑(intelcorei7)上,运行速度大约是您提供的代码的5倍(在不同的映像上测试了1000次)。
相关文章:
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- C++线性搜索算法,确定数组中元素的数量
- C++结构元素(成员变量)的数量
- 如何计算地图中重复元素/值的数量?
- 如何获取指针数组中的元素数量?
- 我正在尝试计算链表中当前元素的数量
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- 调用QVector::保留即使不知道确切的元素数量?
- 如何获得相同数量的第一个和第二个元素以及它们在c++中各自的位置
- 如何为包含最多N个元素的std::multiset调用最大数量分配
- 如何将输入到具有未知数量元素的数组中?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- C++17 在逗号上拆分 constexpr 字符串并在编译时有元素的数量?
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- 具有未知数量元素的内存分配
- 将std::pair转换为具有任意数量元素的std::tuple
- 使用Kmean找到具有最高数量元素的聚类
- 如何初始化具有特定数量元素的集合
- c++中向std::vector中添加任意数量元素的最有效方法是什么?