题解 | 实现 k-Means 聚类算法

实现 k-Means 聚类算法

https://www.nowcoder.com/practice/dc90d7c8b7bd44ac8b5029f830cd2e65

import numpy as np

def k_means_clustering(points, k, initial_centroids, max_iterations):
    #不加浮点数会在计算的时候被夹断成整数!!!!
    points=np.array(points,dtype=float)
    initial_centroids=np.array(initial_centroids,dtype=float)
    centroids=initial_centroids
    n_sample=points.shape[0]
    distance_list=np.zeros((n_sample,k))
    labels=np.zeros((n_sample))
    for i in range(max_iterations):
        #对固定的点j
        for j in range(n_sample):
            #对固定的聚类m
            for m in range(k):
                #计算点j到聚类m的距离
                distance_list[j][m]=distance(points[j],centroids[m])
            #找出j到所有聚类距离最小的聚类标签    
            labels[j]=np.argmin(distance_list[j,:])
        
        for m in range(k):
            #更新聚类
            centroids[m]=np.mean(points[labels==m], axis=0)
            centroids.tolist()
            #题目要求用()输出!!
    return [tuple(round(x, 4) for x in c) for c in centroids]


def distance(x1,x2):
    return sum((x1-x2)**2)

def main():
    # Read input for points
    points = eval(input())

    # Read input for number of clusters
    k = int(input())

    # Read input for initial centroids
    initial_centroids = eval(input())

    # Read input for maximum iterations
    max_iterations = int(input())

    # Perform k-Means clustering
    final_centroids = k_means_clustering(points, k, initial_centroids, max_iterations)

    # Print the final centroids
    print(final_centroids)

if __name__ == "__main__":
    main()

全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务