Skip to content

Commit 31b75f1

Browse files
author
Nguyen Mau Dung
authored
Using vectorization to speed up computation (AtsushiSakai#427)
1 parent 35e23c8 commit 31b75f1

File tree

1 file changed

+12
-29
lines changed

1 file changed

+12
-29
lines changed

Mapping/rectangle_fitting/rectangle_fitting.py

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)