def explore(self, T0, *args): """ Evaluate the similarity at the transformations specified by sequences of parameter values. For instance: explore(T0, (0, [-1,0,1]), (4, [-2.,2])) """ nparams = T0.param.size sizes = np.ones(nparams) deltas = [[0] for i in range(nparams)] for a in args: deltas[a[0]] = a[1] grids = np.mgrid[[slice(0, len(d)) for d in deltas]] ntrials = np.prod(grids.shape[1:]) Deltas = [np.asarray(deltas[i])[grids[i,:]].ravel() for i in range(nparams)] simis = np.zeros(ntrials) params = np.zeros([nparams, ntrials]) T = Affine() for i in range(ntrials): t = T0.param + np.array([D[i] for D in Deltas]) T.param = t simis[i] = self.eval(T) params[:, i] = t return simis, params