[Scipy-svn] r3077 - trunk/Lib/cluster

scipy-svn@scip... scipy-svn@scip...
Thu Jun 7 23:42:30 CDT 2007


Author: cdavid
Date: 2007-06-07 23:42:23 -0500 (Thu, 07 Jun 2007)
New Revision: 3077

Modified:
   trunk/Lib/cluster/vq.py
Log:
Additional init method for kmeans2, 'matrix', to avoid possible confusion between k number of components and k unique initial cluster. Close #443

Modified: trunk/Lib/cluster/vq.py
===================================================================
--- trunk/Lib/cluster/vq.py	2007-06-08 04:14:14 UTC (rev 3076)
+++ trunk/Lib/cluster/vq.py	2007-06-08 04:42:23 UTC (rev 3077)
@@ -479,8 +479,8 @@
             dimensional data, rank 2 multidimensional data, in which case one
             row is one observation.
         k : int or ndarray
-            Number of clusters. If a ndarray is given instead, it is
-            interpreted as initial cluster to use instead.
+            Number of clusters. If minit arg is 'matrix', or if a ndarray is
+            given instead, it is interpreted as initial cluster to use instead.
         niter : int
             Number of iterations to run.
         thresh : float
@@ -495,8 +495,11 @@
             points choses k points at random from the points in data.
 
             uniform choses k points from the data such are they form a uniform
-            grid od the dataset.
+            grid od the dataset (not supported yet).
 
+            matrix means that k has to be interpreted as initial clusters
+            (format is the same than data).
+
     :Returns:
         clusters : ndarray
             the found clusters (one cluster per row).
@@ -517,7 +520,7 @@
 
     # If k is not a single value, then it should be compatible with data's
     # shape
-    if N.size(k) > 1:
+    if N.size(k) > 1 or minit == 'matrix':
         if not nd == N.ndim(k):
             raise ValueError("k is not an int and has not same rank than data")
         if d == 1:
@@ -529,7 +532,9 @@
                         data")
         clusters = k.copy()
     else:
-        nc = k
+        nc = int(k)
+        if not nc == k:
+            warnings.warn("k was not an integer, was converted.")
         try:
             init = _valid_init_meth[minit]
         except KeyError:



More information about the Scipy-svn mailing list