2017-01-25 16 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クラスタリングによって最大のクラスタを計算しますが、「clusters [id] ++;と "cluster [id]"が動作します。彼らは何を正確にしていますか?誰もがループの中で起こっているプロセスについての詳細な説明をしてくれますか?どんな助けも高く評価されます。ありがとうございました!このコードスニペットは正確に何をしていますか?

+0

重複する可能性があります:[The Definitive C++ Book Guide and List](0120-388242/327083) –

答えて

1

次の行:

vector<int> clusters(k,0);

は0 clusters[id]の初期値とk総整数それぞれのランダムアクセスのコレクションを定義し、ベクトルのインデックスidに格納された整数値にアクセスします。 clusters[id]++は、インデックスidに格納されている整数値をインクリメントします。これはベクトル上のoperator []が索引付けされた項目への参照を戻し、変更を許可するためです。

+0

ああ参照してください。それは今私にとってもっと理にかなっています。私はちょうど2つのパラメータを持つ変数 "clusters"のために混乱し、変数 "id"でそれをインクリメントします。ありがとう、ミッケル! – littleMissProgrammer

0

forループはbestLabelsのラベルを反復処理し、表示頻度に基づいてスコアを付けます(clusters[id]++ - この部分はスコアまたは頻度が高くなります)。それはまた、最も頻繁なラベルを追跡する - これは条件がするものである。

+0

回答もありがとう、holygeek。私はベクトルともっと混同されていたと思うが、今はそれを得る。 – littleMissProgrammer

関連する問題