Changeset 1182 for framspy/evolalg/dissimilarity/dissimilarity.py
 Timestamp:
 08/31/22 00:05:43 (9 months ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

framspy/evolalg/dissimilarity/dissimilarity.py
r1145 r1182 11 11 12 12 self.output_field = output_field 13 self.fn_reduce = None13 self.fn_reduce = Dissimilarity.get_reduction_by_name(reduction) 14 14 self.knn = knn 15 if reduction == "mean": # TODO change this 'elif' sequence to dictionary? 16 self.fn_reduce = np.mean 17 elif reduction == "max": 18 self.fn_reduce = np.max 19 elif reduction == "min": 20 self.fn_reduce = np.min 21 elif reduction == "sum": 22 self.fn_reduce = np.sum 23 elif reduction == "knn_mean": 24 self.fn_reduce = self.knn_mean 25 elif reduction == "none" or reduction is None: 26 self.fn_reduce = None 15 16 17 @staticmethod 18 def reduce(dissim_matrix, fn_reduce, knn): 19 if fn_reduce is None: 20 return dissim_matrix 21 elif fn_reduce is Dissimilarity.knn_mean: 22 return fn_reduce(dissim_matrix, 1, knn) 27 23 else: 28 r aise ValueError("Unknown reduction type. Supported: mean, max, min, sum, knn_mean, none")24 return fn_reduce(dissim_matrix, axis=1) 29 25 30 def reduce(self, dissim_matrix):31 if self.fn_reduce is None:32 return dissim_matrix33 return self.fn_reduce(dissim_matrix, axis=1)34 26 35 def knn_mean(self, dissim_matrix,axis): 36 return np.mean(np.partition(dissim_matrix, self.knn)[:,:self.knn],axis=axis) 27 @staticmethod 28 def knn_mean(dissim_matrix, axis, knn): 29 return np.mean(np.partition(dissim_matrix, knn)[:, :knn], axis=axis) 30 31 32 @staticmethod 33 def get_reduction_by_name(reduction: str): 34 35 if reduction not in REDUCTION_FUNCTION: 36 raise ValueError(f"Unknown reduction type '{reduction}'. Supported: {','.join(REDUCTION_FUNCTION.keys())}") 37 38 return REDUCTION_FUNCTION[reduction] 39 40 41 42 REDUCTION_FUNCTION = { 43 "mean": np.mean, 44 "max": np.max, 45 "min": np.min, 46 "sum": np.sum, 47 "knn_mean": Dissimilarity.knn_mean, 48 "none": None 49 }
Note: See TracChangeset
for help on using the changeset viewer.