2017-01-25 68 views
-7
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 Clustering计算最大的群集,但我不太明白“clusters [id] ++;”和“集群[id]”工作。他们究竟做了什么?任何人都可以请详细解释for循环内发生的过程吗?任何帮助将不胜感激。谢谢!这段代码片段究竟做了什么?

+0

可能的重复:[The Definitive C++ Book Guide and List](http://stackoverflow.com/q/388242/327083) –

回答

1

下面的行:

vector<int> clusters(k,0);

定义每个k总整数的随机存取收集与0 clusters[id]初始值访问存储在所述矢量索引id的整数值。 clusters[id]++递增存储在索引id处的整数值。这是可行的,因为向量上的operator []返回索引项的引用,允许修改。

+0

哦,我明白了。现在对我来说更有意义。我只是因为具有两个参数的“簇”变量而感到困惑,并用变量“id”增加它。谢谢米克尔! – littleMissProgrammer

0

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

+0

谢谢您的回答,holygeek。我想我更倾向于与变量混淆,但我现在明白了。 – littleMissProgrammer