20def ToolSimpleKmeans(V, K, numMaxIter=1000, prevState=None):
21
22
23 if prevState is None:
24 state = CKMeansState(V[:, np.round(np.random.rand(K) * (V.shape[1]-1)).astype(int)])
25 else:
26 state = CKMeansState(prevState.mu.copy())
27 range_V = np.array([np.min(V, axis=1), np.max(V, axis=1)])
28
29
30 clusterIdx = assignClusterLabels_I(V, state)
31
32 for j in range(numMaxIter):
33 prevState = CKMeansState(state.mu.copy())
34
35
36 state = computeClusterMeans_I(V, clusterIdx, K)
37
38
39 state = reinitState_I(state, clusterIdx, K, range_V)
40
41
42 clusterIdx = assignClusterLabels_I(V, state)
43
44
45 if np.max(np.sum(np.abs(state.mu-prevState.mu))) == 0:
46 break
47
48 return clusterIdx, state.mu
49
50