编程中在做数值相等判断的时候,直接使用==判断并不可靠。实际上经过运算后的两个值(浮点型)并不可能完全一致,可能会因为小数点后的些许差异导致判断为false。
比如:

1
print 1e-5 == 1e-6 //这肯定是false,但是实际这两个值可以看作近似相等。

在kmeans中判断是否结束循环,就是判断重新计算的聚类中心点是否和原聚类中心点一致,实际上新旧聚类中心点之间会有一个可允许的误差。修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
def kmeans(data, n, m, k):
    rarray = np.random.random(size=k)
    rarray = np.floor(rarray*n)
    rarray.astype(int)
    cls = np.zeros([1,n],np.int)           
    center = np.take(data,rarray)
    pcenter = np.zeros([k,m])
    end = True
    while end:
        for i in xrange(n):
            tmp = data[i] - center
            tmp = np.square(tmp)
            tmp = np.sum(tmp,axis=1)
            cls[i] = np.argmin(tmp)
        center = np.zeros([k,m])
        count = np.zeros([1,k],np.int)
        for i in xrange(n):
            center[cls[i]]=center[cls[i]]+data[i]
            count[cls[i]]= count[cls[i]]+1
        if np.sum(center/count - pcenter) <= 1e-4:
            end = False
        pcenter = center/count

最新文章

  1. 基于redis分布式锁实现“秒杀”
  2. mfc ui库
  3. 菜鸟-手把手教你把Acegi应用到实际项目中(7)-缓存用户信息
  4. POJ 1450
  5. Stanford parser:入门使用
  6. 《赢在用户:Web人物角色创建和应用实践指南》阅读总结
  7. Centos 6.5升级安装Git
  8. iOS开发UI篇-tableView在编辑状态下的批量操作(多选)
  9. Linux搭建SSH服务器
  10. [置顶] 步步辨析JS中的对象成员
  11. jar包问题
  12. Java中需要总结的几个问题
  13. ui-router多视图+嵌套视图+传参综合练习
  14. LightOJ DNA Prefix(字典树+dfs)
  15. DVWA 黑客攻防演练(二)暴力破解 Brute Froce
  16. SpringBoot2.x使用EasyPOI导入Excel浅谈
  17. C#模拟HTTP请求Post JSON
  18. 解决IDEA授权报错
  19. 《Linux 性能及调优指南》1.4 硬盘I/O子系统
  20. Spring中ApplicationEvent和ApplicationListener封装

热门文章

  1. wordpress相关
  2. gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)
  3. .m文件导入C++头文件带来的错误
  4. Windowns 无法启动 Office Software Protection Platform 服务,系统找不到指定的文件
  5. machine learning in coding(python):使用贪心搜索【进行特征选择】
  6. BNU 13289 Energetic Pandas DP
  7. 3n+1问题
  8. servlet中的中文乱码问题
  9. Python开发利器PyCharm 2.7附注册码
  10. js getyear和getfullyear