这两段代码:
一个)
void KMeans<N>::assign_pixels_to_clusters()
{
for (auto cluster : clusters)
{
cluster.clear_pixels();
}
for (auto pixel : pixels)
{
float min_distance = FLT_MAX;
Cluster<N> c;
for (auto cluster : clusters)
{
float distance = norm(
pixel.get_value(),
cluster.get_centroid()
);
if (distance < min_distance)
{
min_distance = distance;
c = cluster;
}
}
c.add_pixel(pixel);
}
}
和 B)
template <size_t N>
void KMeans<N>::assign_pixels_to_clusters()
{
for (auto cluster : clusters)
{
cluster.clear_pixels();
}
for (auto pixel : pixels)
{
float min_distance = FLT_MAX;
int idx = 0;
for (int i = 0; i < no_of_clusters; i++)
{
float distance = norm(
pixel.get_value(),
clusters[i].get_centroid()
);
if (distance < min_distance)
{
min_distance = distance;
idx = i;
}
}
clusters[idx].add_pixel(pixel);
}
}
看起来与我相似,但只有 B) 以我想要的方式工作。在 A) 的情况下,像素根本没有分配给集群。在运行代码 A) 之后,簇是空的并且没有分配给它们的像素。你能帮我理解为什么吗?