该代码是知乎作者iSun完成,其实现了高效的numpy运算。

import numpy as np
import matplotlib.pyplot as pltdef distance(vector1, vector2):return np.sqrt(np.sum(np.square(vector2 - vector1)))# 初始化k个中心点
def init_centroids(X, k, seed=110):np.random.seed(seed)n = X.shape[0]assert n >= kidxs = np.random.choice(range(n), k, replace=False)return X[idxs]# 计算k个cluster的中心点
def compute_centroids(X, clusters, k):new_centroids = np.zeros((k, X.shape[1]))for i in range(k):new_centroids[i] = np.mean(X[clusters == i], axis=0)return new_centroids# 计算所有样本点和中心点的距离
def compute_distances(X, centers):double_xy = 2 * X.dot(centers.T)sq_X = np.sum(np.square(X), axis=1, keepdims=True)sq_centers = np.sum(np.square(centers), axis=1)dists = np.sqrt(sq_X - double_xy + sq_centers)return distsdef kmeans(X, k, seed=110, tolerance=1e-5, max_iter=1000):centers = init_centroids(X, k, seed)dists = compute_distances(X, centers)clusters = np.argmin(dists, axis=1)i = 0while True:# 重新计算中心点new_centers = compute_centroids(X, clusters, k)if i > max_iter or distance(new_centers, centers) <= tolerance:print(i)print(distance(new_centers, centers))breakcenters = new_centersdists = compute_distances(X, new_centers)clusters = np.argmin(dists, axis=1)i += 1return clusters, centersif __name__ == '__main__':sample1 = np.random.normal(2, 1, 60).reshape((30, 2))sample2 = np.random.normal(5, 1, 60).reshape((30, 2))X = np.concatenate([sample1, sample2])clusters, centers = kmeans(X, 2)plt.scatter(sample1[:, 0], sample1[:, 1])plt.scatter(sample2[:, 0], sample2[:, 1])plt.scatter(centers[:, 0], centers[:, 1], marker='x', color='r', s=50)

numpy 并行计算实现kmeans操作相关推荐

  1. numpy和torch数据操作对比

    对numpy和torch数据操作进行对比,避免遗忘. ndarray和tensor import torch import numpy as npnp_data = np.arange(6).resh ...

  2. numpy归一化_使用numpy 高效实现K-Means聚类

    好久之前写过K-Means, 但写的极其丑陋,使用的时候还得用 sklearn.cluster.KMeans 包来干.最近需要手撕k-Means,自己也受不了多重for 循环这么disgusting的 ...

  3. numpy.polynomial 常见多项式操作

    numpy.polynomial 常见多项式操作 文章目录 构造一元多项式 多项式与数直接相乘和加减 快速求某点处的值 poly1d 的 attributes poly1d 的 Methods 积分 ...

  4. 利用numpy对像素点进行操作

    1,源代码: import cv2 as cv import numpy as npdef access_pixels(image): #定义访问图像像素值的函数print(image.shape); ...

  5. Python Numpy中返回下标操作函数-节约时间的利器

    如果觉得Python慢,那么首先应该想到是不是没有用对. Numpy是Python中自带的一个数值计算库,包含了大量数值计算的常用方法.其底层大量使用C/C++(超过50%的代码量),矩阵计算调用LA ...

  6. 图解 Numpy,原来数据操作这么简单!

    本文用可视化的方式介绍了 NumPy 的功能和使用示例. NumPy 软件包是 Python 生态系统中数据分析.机器学习和科学计算的主力军.它极大地简化了向量和矩阵的操作处理.Python 的一些主 ...

  7. numpy读取csv_Numpy——IO操作与数据处理

    一.问题? 大多数数据并不是我们自己构造的,存在文件当中.我们需要工具去获取,但是Numpy其实并不适合去读取处理数据,这里我们了解相关API,以及Numpy不方便的地方即可. 二.Numpy读取 g ...

  8. NumPy快速入门--形状操作

    文章目录 1. 更改数组的形状 2. 将不同数组堆叠在一起 3. 将一个数组分成几个较小的数组 1. 更改数组的形状 >>> import numpy as np >>& ...

  9. numpy、cv2等操作图片基本操作

    相关包 matplotlib PIL cv2 numpy 各种操作 读取图片 1 matplotlib.pylab import pylab as plt import numpy as np img ...

最新文章

  1. [文摘20070930]人际关系,你有五十五招
  2. Using Regular Expression to validate a Guid
  3. 中科大5名博士生凌晨2点处置实验室漏水,被重奖12万元
  4. “国家使命”图书第一批权威发布
  5. Androidi性能优化之多线程和同步
  6. pythonc代码_Python实现C代码统计工具(一)
  7. pytorch nn.Module.parameters
  8. 监控web状态的脚本
  9. 常用easyUI -icon 图标
  10. 主机电子游戏攻略资源分享
  11. mysql目录结构与源码
  12. 车型代号对照表_上海大众车型与VIN代号对照表
  13. Flask(6):Flask的闪现+Flask的蓝图
  14. SNF快速开发平台2019-权限管理模型-记录级-字段级权限实践
  15. 粥 淡薄之中滋味长
  16. webservice接口和http接口(API接口)的区别
  17. 如何在JS中计算扑克牌中的顺子、对子、半顺、豹子、杂六
  18. javaweb——spring cloud分布式系统(1)搭建配置管理中心
  19. oracle 物化视图没效果,物化视图失效的几种情况及测试
  20. CVPR 2022 | 刷新low-level视觉多项第一!Restormer:图像复原又一力作!

热门文章

  1. 被嫌弃的程序猿的一生,请耐心看完,会有你的影子
  2. mcrpg服务器文件,【服务端发布】我的世界勇士RPG服务端重新发布!
  3. 自编程实现朴素贝叶斯算法,Navie Bayes程序(python),并对鸢尾花数据进行分类。
  4. 详解IaaS,PaaS,SaaS三者关联区别
  5. java spring上传图片_基于Spring Boot实现图片上传/加水印一把梭操作
  6. 【netty学习】之零拷贝
  7. Tomcat简介和安装
  8. 982. 按位与为零的三元组
  9. UE4seq过场动画混合到玩家视角
  10. linux也是x86架构吗,linux下X86架构IDT解析