这段代码片段到底做了什么?

时间:2017-01-25 23:57:35

标签: c++ k-means

int max = 0, id = 0;
int indx= 0;

vector<int> clusters(k,0);

for (size_t i = 0; i < bestLabels.size(); i++)
{
    id = bestLabels[i];
    clusters[id]++;

    if (clusters[id] > max)
    {
        max = clusters[id];
        indx = id;
    }
}

此代码通过K-Means聚类计算最大的聚类,但我不太明白“clusters [id] ++;”和“cluster [id]”工作。他们到底做了什么?谁能请详细解释for循环中发生的过程?任何帮助将受到高度赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

以下一行:

vector<int> clusters(k,0);

定义k个整数的随机访问集合,每个整数的初始值为0. clusters[id]访问存储在向量中的索引id的整数值。 clusters[id]++递增存储在索引id处的整数值。这是有效的,因为向量上的operator []返回对索引项的引用,允许修改。

答案 1 :(得分:0)

for循环遍历bestLabels中的标签,并根据它们出现的频率对其进行评分(clusters[id]++ - 此部分会增加分数或频率)。它还跟踪最常见的标签 - 这是if (clusters[id] > max)条件的条款。