这是一个愚蠢的问题,但基本上我使用k-means将我的数据分为不同的群集,这是针对班级项目btw的。我已经完成所有工作,但是我必须为每个输入将集群写入文件中,以便可以对其进行测试。我的实际代码运行大约需要2-3分钟,但写入文件需要大约10分钟。我有10,000个输入/输出,当前我的运行时约为n ^ 3。就分配而言,时间实际上并不重要,但是我想知道是否有人可以帮助我优化它,我知道我不知道有不同的Python迭代技巧可以加快速度。
我的k是10,所以我有10个质心,基本上我选择了数组并选择了一个质心,检查它是否包含数组,如果没有,我移到下一个,依此类推。我需要花费很长时间的每10,000个输入执行此操作。代码不是很有效
file = open("image.txt", "w")
for point in array:
for x in range(len(centroids)):
for i in centroids[x]:
if np.array_equal(point,i):
file.write(str(x+1)+"\n")
file.close()
答案 0 :(得分:0)
好的,让我尝试清理一些东西。发表评论,让我知道我所说的内容是否不适用。另外,如果您必须检查所有内容,则可能无法简化计算。
with open("image.txt", "w") as file:
for point in array:
for centroid_index, centroid in enumerate(centroids):
for centroid_point in centroid:
if np.array_equal(point,centroid_point):
file.write(str(centroid_index+1)+"\n")
如果您可以为我解释array
,centroids
的对象类型以及您要写入文件的内容,那么我可以提供一些更具体的方法。
答案 1 :(得分:0)
这行是个坏主意:
for point in array:
为什么遍历所有点以找到质心?
只需按索引输出它们,然后仅对形心进行迭代。