Skip to content

Commit df7eb56

Browse files
committed
Nomogram: Speedups
1 parent e81f2d9 commit df7eb56

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

Orange/widgets/visualize/ownomogram.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import time
22
from enum import IntEnum
3+
from collections import OrderedDict
34

45
import numpy as np
56

@@ -866,11 +867,13 @@ def calculate_log_reg_coefficients(self):
866867
self.log_reg_coeffs = [coeffs[:, ranges[i]] for i in range(len(attrs))]
867868
self.log_reg_coeffs_orig = self.log_reg_coeffs.copy()
868869

869-
for i in range(len(self.log_reg_coeffs)):
870+
min_values = nanmin(self.data.X, axis=0)
871+
max_values = nanmax(self.data.X, axis=0)
872+
873+
for i, min_t, max_t in zip(range(len(self.log_reg_coeffs)),
874+
min_values, max_values):
870875
if self.log_reg_coeffs[i].shape[1] == 1:
871876
coef = self.log_reg_coeffs[i]
872-
min_t = nanmin(self.data.X, axis=0)[i]
873-
max_t = nanmax(self.data.X, axis=0)[i]
874877
self.log_reg_coeffs[i] = np.hstack((coef * min_t, coef * max_t))
875878
self.log_reg_cont_data_extremes.append(
876879
[sorted([min_t, max_t], reverse=(c < 0)) for c in coef])
@@ -1105,13 +1108,15 @@ def send_report(self):
11051108

11061109
@staticmethod
11071110
def reconstruct_domain(original, preprocessed):
1108-
attrs = []
1111+
# abuse dict to make "in" comparisons faster
1112+
attrs = OrderedDict()
11091113
for attr in preprocessed.attributes:
11101114
cv = attr._compute_value.variable._compute_value
11111115
var = cv.variable if cv else original[attr.name]
1112-
if var in attrs:
1116+
if var in attrs: # the reason for OrderedDict
11131117
continue
1114-
attrs.append(var)
1118+
attrs[var] = None # we only need keys
1119+
attrs = list(attrs.keys())
11151120
return Domain(attrs, original.class_var, original.metas)
11161121

11171122
@staticmethod

0 commit comments

Comments
 (0)