我正在写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 并设置元素数量,然后如何将第二个 QList 用作动态(自动调整大小)容器(QList::append())
?
cluster
是一个组号,其中_centroids[cluster]
与这个相同的组_clusters[cluster][somePoint]
。