@@ -69,15 +69,11 @@ def _calc_closeness_criterion(self, c1, c2):
69
69
c1_min = min (c1 )
70
70
c2_min = min (c2 )
71
71
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 ()
81
77
82
78
return beta
83
79
@@ -88,26 +84,13 @@ def _calc_variance_criterion(c1, c2):
88
84
c1_min = min (c1 )
89
85
c2_min = min (c2 )
90
86
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.
111
94
gamma = V1 + V2
112
95
113
96
return gamma
0 commit comments