最近学习了numpy库,对之前的KMeans算法进行了一个改进。
import random
import copy
import matplotlib.pyplot as plt
import numpy as np
import time
# 该写法只在计算使用numpy,其余使用列表
class KMeans():
def __init__(self,data,k=1):
# 可以传入ndarry类型
self.__data = data # 存放输入点数据
self.__k = k # 中心点个数
# 可以改为ndarry类型
self.__centerPoint = [] # 中心点
self.__result = [] # 对输入点进行分类的结果
for i in range(k):
self.__result.append([]) #[[] [] [] [] [] ]
# 随机取k个中心点
def randomCenterPoint(self):
for i in range(self.__k):
# 随机出k个下标
index = random.randint(0,len(self.__data)-1)
# 判断取出的数是否在中心点中 防止取重复数 使中心点重复
# 不使用ndarry类型,因为tnp.append添加数据特别耗时间
if self.__data[index] not in self.__centerPoint:
self