diff --git a/brainscore_vision/model_helpers/brain_transformation/behavior.py b/brainscore_vision/model_helpers/brain_transformation/behavior.py index 28aeb9e6a..97cc62dcd 100644 --- a/brainscore_vision/model_helpers/brain_transformation/behavior.py +++ b/brainscore_vision/model_helpers/brain_transformation/behavior.py @@ -192,7 +192,7 @@ def start_task(self, task: BrainModel.Task, fitting_stimuli, number_of_trials=1, number_of_trials=number_of_trials, require_variance=require_variance) fitting_features = fitting_features.transpose('presentation', 'neuroid') - assert all(fitting_features['stimulus_id'].values == fitting_stimuli['stimulus_id'].values), \ + assert all(self.order_preserving_unique(fitting_features['stimulus_id'].values) == fitting_stimuli['stimulus_id'].values), \ "stimulus_id ordering is incorrect" self.classifier.fit(fitting_features, fitting_features['image_label']) @@ -241,6 +241,16 @@ def labels_to_indices(self, labels): index2label = OrderedDict((index, label) for label, index in label2index.items()) return indices, index2label + @staticmethod + def order_preserving_unique(array): + """ + This function sorts an array and removes duplicates while preserving the order of the elements. + This function is used in favor of np.unique to ensure that the order of the stimulus_ids is preserved, as + np.unique performs sorting on the array. + """ + _, indices = np.unique(array, return_index=True) + return array[np.sort(indices)] + class OddOneOut(BrainModel): def __init__(self, identifier: str, activations_model, layer: Union[str, List[str]]):