私はkmeansアルゴリズムを書いています。ポイントのグループを保存するには、2D 動的コンテナが必要です。ここにいくつかのコード
void KMeans::initialPartitionPoints()
{
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
for (int i = 0; i < numberOfClusters(); i++)
{
qint64 randomValue = qrand() % _points->size();
_centroids.push_back(new Centroid(_points->at(randomValue)));
}
for (int i = 0; i < _points->size(); i++)
{
int cluster;
qreal bestDistance = std::numeric_limits<qreal>::max();
qreal distance;
for (int j = 0; j < _centroids.size(); j++)
{
distance = _distanceMeasure->calculateDistance(_centroids.at(j), _points->at(i));
if (distance < bestDistance)
{
bestDistance = distance;
cluster = j;
}
}
WHAT HERE TO STORE i POINT IN j GROUP?
}
}
_centroids
- グループの中心であるポイントのリストです
_points
- すべてのポイントのリストです
QList< QList<Point*> > _clusters
コンストラクターで列数が指定され、各列の要素 (行) の数が不明なクラスターにポイントを格納するようなものを作成するにはどうすればよいですか。つまり、最初の QList を初期化して要素数を設定し、次に 2 番目の QList を動的 (自動サイズ変更) コンテナーとして使用する方法を教えて(QList::append())
ください。
cluster
はグループ番号で、_centroids[cluster]
はこのグループと同じグループ_clusters[cluster][somePoint]
です。