Browse Source

output more statistics of sub-clusters

Xi Ruoyao 4 years ago
parent
commit
0530c53dd2
1 changed files with 19 additions and 10 deletions
  1. 19 10
      main.py

+ 19 - 10
main.py

@@ -10,6 +10,16 @@ import csv_parser
 import recog
 import metric
 
+def cluster_statistic(xy):
+    center = np.array([np.average(xy[:, 0]), np.average(xy[:, 1])])
+    center_p = namedtuple("point", "lon lat")(center[0], center[1])
+    rad = 0
+    for loc in xy:
+        p = namedtuple("point", "lon lat")(loc[0], loc[1])
+        rad = max(rad, metric.spherical_distance(center_p, p))
+    rad *= 6400 * 1000
+    return (center, rad)
+
 if __name__ == '__main__':
     data = csv_parser.parse_data_from_csv('pitchtest0730.csv')
     groups = groupby(data, key = lambda x: x.hwid)
@@ -66,16 +76,10 @@ if __name__ == '__main__':
 
         xy = x[class_member_mask]
         if k != -1:
+            center, rad = cluster_statistic(xy)
             print("cluster %d:" % k)
-            center = np.array([np.average(xy[:, 0]), np.average(xy[:, 1])])
             print("size =", len(xy))
             print("center = %f, %f" % (center[0], center[1]))
-            center_p = namedtuple("point", "lon lat")(center[0], center[1])
-            rad = 0
-            for loc in xy:
-                p = namedtuple("point", "lon lat")(loc[0], loc[1])
-                rad = max(rad, metric.spherical_distance(center_p, p))
-            rad *= 6400 * 1000
             print("radius = %f m" % rad)
 
         yaw = yaws[class_member_mask]
@@ -86,9 +90,14 @@ if __name__ == '__main__':
                           for each in np.linspace(0, 1, len(lbs))]
         for l in lbs:
             if l != -1:
-                print("  sub-cluster %d: size = %d, avg yaw = %f" %
-                        (l, np.sum(db_yaw.labels_ == l),
-                         180 / pi * np.average(yaw[(db_yaw.labels_ == l)])))
+                mask = (db_yaw.labels_ == l)
+                center, rad = cluster_statistic(xy[mask])
+                print("  sub-cluster %d:" % l)
+                print("  size =", np.sum(mask))
+                print("  center = %f, %f" % (center[0], center[1]))
+                print("radius = %f m" % rad)
+                print("  avg yaw =",
+                        np.average(np.fmod(yaw[mask], 2*pi)) / pi * 180)
 
         kwargs = {'width': 1e-5}
         for i in range(len(xy)):