def xcorr_norm(self): """The cross-correlation between every pairwise combination time-series in the object, where the zero lag correlation is normalized to be equal to the correlation coefficient between the time-series Returns ------- TimeSeries: the time-dependent cross-correlation, with zero-lag at time=0""" tseries_length = self.input.data.shape[0] t_points = self.input.data.shape[-1] xcorr = np.zeros((tseries_length, tseries_length, t_points*2-1)) for i in xrange(tseries_length): for j in xrange(i,tseries_length): xcorr[i,j] = tsu.crosscov( self.input.data[i],self.input.data[j],all_lags=True ) xcorr[i,j] /= (xcorr[i,j,t_points]) xcorr[i,j] *= self.output[i,j] idx = tsu.tril_indices(tseries_length,-1) xcorr[idx[0],idx[1],...] = xcorr[idx[1],idx[0],...] return ts.TimeSeries(xcorr, sampling_interval=self.input.sampling_interval, t0=-self.input.sampling_interval*t_points)
def xcorr(self): """The cross-correlation between every pairwise combination time-series in the object. Uses np.correlation('full'). Returns ------- TimeSeries: the time-dependent cross-correlation, with zero-lag at time=0""" tseries_length = self.input.data.shape[0] t_points = self.input.data.shape[-1] xcorr = np.zeros((tseries_length, tseries_length, t_points*2-1)) for i in xrange(tseries_length): for j in xrange(i,tseries_length): xcorr[i][j] = tsu.crosscov( self.input.data[i],self.input.data[j],all_lags=True ) idx = tsu.tril_indices(tseries_length,-1) xcorr[idx[0],idx[1],...] = xcorr[idx[1],idx[0],...] return ts.TimeSeries(xcorr, sampling_interval=self.input.sampling_interval, t0=-self.input.sampling_interval*t_points)
def test_crosscov(): N = 128 ar_seq1, _, _ = utils.ar_generator(N=N) ar_seq2, _, _ = utils.ar_generator(N=N) for all_lags in (True, False): sxy = utils.crosscov(ar_seq1, ar_seq2, all_lags=all_lags) sxy_ref = ref_crosscov(ar_seq1, ar_seq2, all_lags=all_lags) err = sxy_ref - sxy mse = np.dot(err, err) / N npt.assert_(mse < 1e-12, "Large mean square error w.r.t. reference cross covariance")
def test_crosscov(): N = 128 ar_seq1, _, _ = utils.ar_generator(N=N) ar_seq2, _, _ = utils.ar_generator(N=N) for all_lags in (True, False): sxy = utils.crosscov(ar_seq1, ar_seq2, all_lags=all_lags) sxy_ref = ref_crosscov(ar_seq1, ar_seq2, all_lags=all_lags) err = sxy_ref - sxy mse = np.dot(err, err) / N nt.assert_true(mse < 1e-12, \ 'Large mean square error w.r.t. reference cross covariance')