k-meansを書き直した

自分のコードみて無駄なところを省いた。
いろんな人の参考にしたけど、自分のコードがくそすぎた。
(さっさとknnを実装して公開します。はい。)
使い方:
import Rkmeans as R
k = 2
p = R.kms(input,k)
p.kmeans(input,k)

#-*- coding:utf-8 -*-
#使い方
#import Rkmeans as R
#R.kms(input,k)

import numpy as np

class kms:
	def __init__(self,input,k):
		#入力データの行と列の数を決める
		#列
		self.nDATA = np.shape(input)[0]
		#行
		self.nK = np.shape(input)[1]
		
		#初期化
		self.mu = np.random.rand(k,self.nK)
		self.r = np.zeros((self.nDATA,k))
	
	def kmeans(self,input,k,update=100):
		for i in xrange(update):
			OLD = (self.r).copy()
			self.r = self.E_step(input)
			if np.all( self.r == OLD): break
			self.mu = self.M_step(input)
		return self.r
	
	def E_step(self,input):
		for n in xrange(np.shape(self.r)[0]):
			for k in xrange(np.shape(self.r)[1]):
				if k == np.argmin(((input[n]-self.mu)**2).sum(axis=1)):
					self.r[n][k] = 1
				else:
					self.r[n][k] = 0
		return self.r
		
	def  M_step(self,input):
		A = np.dot((self.r).T,input)
		B = (self.r).sum(axis=0)
		for n in xrange(np.shape(self.mu)[0]):
			for k in xrange(np.shape(self.mu)[1]):
				self.mu[n][k] = A[n][k]/B[n]
		return self.mu