@@ -69,15 +69,11 @@ def _calc_closeness_criterion(self, c1, c2):
6969 c1_min = min (c1 )
7070 c2_min = min (c2 )
7171
72- D1 = [min ([np .linalg .norm (c1_max - ic1 ),
73- np .linalg .norm (ic1 - c1_min )]) for ic1 in c1 ]
74- D2 = [min ([np .linalg .norm (c2_max - ic2 ),
75- np .linalg .norm (ic2 - c2_min )]) for ic2 in c2 ]
76-
77- beta = 0
78- for i , _ in enumerate (D1 ):
79- d = max (min ([D1 [i ], D2 [i ]]), self .min_dist_of_closeness_criteria )
80- beta += (1.0 / d )
72+ # Vectorization
73+ D1 = np .minimum (c1_max - c1 , c1 - c1_min )
74+ D2 = np .minimum (c2_max - c2 , c2 - c2_min )
75+ d = np .maximum (np .minimum (D1 , D2 ), self .min_dist_of_closeness_criteria )
76+ beta = (1.0 / d ).sum ()
8177
8278 return beta
8379
@@ -88,26 +84,13 @@ def _calc_variance_criterion(c1, c2):
8884 c1_min = min (c1 )
8985 c2_min = min (c2 )
9086
91- D1 = [min ([np .linalg .norm (c1_max - ic1 ),
92- np .linalg .norm (ic1 - c1_min )]) for ic1 in c1 ]
93- D2 = [min ([np .linalg .norm (c2_max - ic2 ),
94- np .linalg .norm (ic2 - c2_min )]) for ic2 in c2 ]
95-
96- E1 , E2 = [], []
97- for (d1 , d2 ) in zip (D1 , D2 ):
98- if d1 < d2 :
99- E1 .append (d1 )
100- else :
101- E2 .append (d2 )
102-
103- V1 = 0.0
104- if E1 :
105- V1 = - np .var (E1 )
106-
107- V2 = 0.0
108- if E2 :
109- V2 = - np .var (E2 )
110-
87+ # Vectorization
88+ D1 = np .minimum (c1_max - c1 , c1 - c1_min )
89+ D2 = np .minimum (c2_max - c2 , c2 - c2_min )
90+ E1 = D1 [D1 < D2 ]
91+ E2 = D2 [D1 >= D2 ]
92+ V1 = - np .var (E1 ) if len (E1 ) > 0 else 0.
93+ V2 = - np .var (E2 ) if len (E2 ) > 0 else 0.
11194 gamma = V1 + V2
11295
11396 return gamma
0 commit comments