@@ -182,29 +182,10 @@ def shannon_diversity(self) -> float:
182182 Returns:
183183 float: The current Shannon diversity index in the subpopulation.
184184 """
185- number_of_features = self .population .individuals [0 ].number_of_features
186- traits = np .zeros ((self .get_population_size (), number_of_features ))
187- i = 0
188- for individual in self .population :
189- traits [i ] = (individual .features )
190- i += 1
191-
192- shannons = []
193- # looping over all features, for each feature extract the frequency of each trait in the population
194- for k in range (0 , number_of_features ):
195- frequencies = []
196- feature_traits = traits [:, k ]
197- unique , counts = np .unique (feature_traits , return_counts = True )
198- for trait_count in counts :
199- trait_frequency = trait_count / (self .get_population_size ())
200- frequencies .append (trait_frequency )
201-
202- frequencies = np .array (frequencies )
203- shannon_for_trait = - np .sum (frequencies * np .log (frequencies ))
204-
205- shannons .append (shannon_for_trait )
206-
207- shannon_index = np .mean (shannons )
185+ traits = self .return_traits_sets ()
186+ uniques , counts = np .unique (traits , axis = 0 , return_counts = True )
187+ frequencies = counts / self .get_population_size ()
188+ shannon_index = - np .sum (frequencies * np .log (frequencies ))
208189
209190 return shannon_index
210191
@@ -217,13 +198,9 @@ def simpson_diversity(self) -> float:
217198 """
218199 traits = self .return_traits_sets ()
219200 uniques , counts = np .unique (traits , axis = 0 , return_counts = True )
201+ frequencies = counts / self .get_population_size ()
202+ simpson_diversity_index = np .sum (frequencies * frequencies )
220203
221- simpson_denominators = []
222- for i in range (0 , len (counts )):
223- simpson_denominators .append (counts [i ]* (counts [i ]- 1 ))
224-
225- simpson_diversity_index = self .get_population_size ()* (self .get_population_size () - 1 ) / sum (simpson_denominators )
226-
227204 return simpson_diversity_index
228205
229206class IndividualsIterator (object ):
0 commit comments