numpy 并行计算实现kmeans操作
该代码是知乎作者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操作相关推荐
- numpy和torch数据操作对比
对numpy和torch数据操作进行对比,避免遗忘. ndarray和tensor import torch import numpy as npnp_data = np.arange(6).resh ...
- numpy归一化_使用numpy 高效实现K-Means聚类
好久之前写过K-Means, 但写的极其丑陋,使用的时候还得用 sklearn.cluster.KMeans 包来干.最近需要手撕k-Means,自己也受不了多重for 循环这么disgusting的 ...
- numpy.polynomial 常见多项式操作
numpy.polynomial 常见多项式操作 文章目录 构造一元多项式 多项式与数直接相乘和加减 快速求某点处的值 poly1d 的 attributes poly1d 的 Methods 积分 ...
- 利用numpy对像素点进行操作
1,源代码: import cv2 as cv import numpy as npdef access_pixels(image): #定义访问图像像素值的函数print(image.shape); ...
- Python Numpy中返回下标操作函数-节约时间的利器
如果觉得Python慢,那么首先应该想到是不是没有用对. Numpy是Python中自带的一个数值计算库,包含了大量数值计算的常用方法.其底层大量使用C/C++(超过50%的代码量),矩阵计算调用LA ...
- 图解 Numpy,原来数据操作这么简单!
本文用可视化的方式介绍了 NumPy 的功能和使用示例. NumPy 软件包是 Python 生态系统中数据分析.机器学习和科学计算的主力军.它极大地简化了向量和矩阵的操作处理.Python 的一些主 ...
- numpy读取csv_Numpy——IO操作与数据处理
一.问题? 大多数数据并不是我们自己构造的,存在文件当中.我们需要工具去获取,但是Numpy其实并不适合去读取处理数据,这里我们了解相关API,以及Numpy不方便的地方即可. 二.Numpy读取 g ...
- NumPy快速入门--形状操作
文章目录 1. 更改数组的形状 2. 将不同数组堆叠在一起 3. 将一个数组分成几个较小的数组 1. 更改数组的形状 >>> import numpy as np >>& ...
- numpy、cv2等操作图片基本操作
相关包 matplotlib PIL cv2 numpy 各种操作 读取图片 1 matplotlib.pylab import pylab as plt import numpy as np img ...
最新文章
- [文摘20070930]人际关系,你有五十五招
- Using Regular Expression to validate a Guid
- 中科大5名博士生凌晨2点处置实验室漏水,被重奖12万元
- “国家使命”图书第一批权威发布
- Androidi性能优化之多线程和同步
- pythonc代码_Python实现C代码统计工具(一)
- pytorch nn.Module.parameters
- 监控web状态的脚本
- 常用easyUI -icon 图标
- 主机电子游戏攻略资源分享
- mysql目录结构与源码
- 车型代号对照表_上海大众车型与VIN代号对照表
- Flask(6):Flask的闪现+Flask的蓝图
- SNF快速开发平台2019-权限管理模型-记录级-字段级权限实践
- 粥 淡薄之中滋味长
- webservice接口和http接口(API接口)的区别
- 如何在JS中计算扑克牌中的顺子、对子、半顺、豹子、杂六
- javaweb——spring cloud分布式系统(1)搭建配置管理中心
- oracle 物化视图没效果,物化视图失效的几种情况及测试
- CVPR 2022 | 刷新low-level视觉多项第一!Restormer:图像复原又一力作!