0
我正在尝试为小型项目实现k均值聚类算法。我来到this article这表明,使用numpy数组函数更新元素
K均值的速度要快得多,如果你写上使用numpy的阵列操作的更新功能,而不用手动循环数组过来,更新自己的值。
我正在使用数组的每个元素迭代来更新它。对于数据集z
中的每个元素,我将通过遍历每个元素从最近的质心分配簇数组。
for i in range(z):
clstr[i] = closest_center(data[i], cen)
和我的更新功能是
def closest_center(x, clist):
dlist = [fabs(x - i) for i in clist]
return clist[dlist.index(min(dlist))]
由于我使用的灰度图像,我使用绝对值来计算的欧氏距离。
我注意到opencv
也有这个算法。执行算法的时间不到2秒,而我的时间超过70秒。我可以知道文章的建议吗?
我的图像作为灰度级导入,表示为2d numpy数组。我进一步转换为1d数组,因为它更容易处理1d数组。
为什么你想要自己实现这个? 'scipy'已经为你提供了k-means聚类算法。 –
@AkshatMahajan作为一个图像处理的小项目。我已经可以通过OpenCV访问它。不过我必须不使用内置功能。 –
你应该分享更多的代码,以便有更好的主意。你也不应该使用欧几里德距离吗? – Romain