Changeset 1182 for framspy/evolalg/dissimilarity/frams_dissimilarity.py
- Timestamp:
- 08/31/22 00:05:43 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
framspy/evolalg/dissimilarity/frams_dissimilarity.py
r1145 r1182 6 6 from evolalg.dissimilarity.dissimilarity import Dissimilarity 7 7 8 #TODO eliminate overlap with dissimilarity.py9 10 8 11 9 class FramsDissimilarity(FramsStep): 12 10 13 def __init__(self, frams_lib, reduction="mean", output_field="dissim", 11 def __init__(self, frams_lib, reduction="mean", output_field="dissim",knn=None, *args, **kwargs): 14 12 super(FramsDissimilarity, self).__init__(frams_lib, *args, **kwargs) 15 13 16 14 self.output_field = output_field 17 self.fn_reduce = None15 self.fn_reduce = Dissimilarity.get_reduction_by_name(reduction) 18 16 self.knn = knn 19 if reduction == "mean":20 self.fn_reduce = np.mean21 elif reduction == "max":22 self.fn_reduce = np.max23 elif reduction == "min":24 self.fn_reduce = np.min25 elif reduction == "sum":26 self.fn_reduce = np.sum27 elif reduction == "knn_mean":28 self.fn_reduce = self.knn_mean29 elif reduction == "none" or reduction is None:30 self.fn_reduce = None31 else:32 raise ValueError("Unknown reduction type. Supported: mean, max, min, sum, knn_mean, none")33 17 34 def reduce(self, dissim_matrix):35 if self.fn_reduce is None:36 return dissim_matrix37 return self.fn_reduce(dissim_matrix, axis=1)38 18 39 19 def call(self, population): … … 41 21 if len(population) == 0: 42 22 return [] 43 dissim_matrix = self.frams.dissimilarity([_.genotype for _ in population] )44 dissim = self.reduce(dissim_matrix)23 dissim_matrix = self.frams.dissimilarity([_.genotype for _ in population], 1) 24 dissim = Dissimilarity.reduce(dissim_matrix, self.fn_reduce, self.knn) 45 25 for d,ind in zip(dissim, population): 46 26 setattr(ind, self.output_field, d) 47 27 return population 48 49 def knn_mean(self, dissim_matrix,axis):50 return np.mean(np.partition(dissim_matrix, self.knn)[:,:self.knn],axis=axis)
Note: See TracChangeset
for help on using the changeset viewer.