Пример #1
0
 def __posterior_kernel_cij_temporal(self, obs_model, cov_matrix, total_cov_matrix, dynamic_modified_fourier_series):
     """
     The bread-and-butter of the method.        
     """        
     y = np.matrix(dynamic_modified_fourier_series).T
     c_ij = cov_matrix * obs_model.H  * matrix_division(divider = total_cov_matrix, divided = y, side = "left", cholesky = "no")
         
     return np.real(np.fft.fftshift(np.fft.ifft(np.fft.ifftshift(np.array(c_ij).flatten()), axis = 0)))
Пример #2
0
 def __get_sample(self, block_matrices, number_sources, number_time_points):
     number_points = block_matrices["block_green_matrix"].shape[0]
     operator = utility.matrix_division(divider = np.identity(number_points) - block_matrices["block_green_matrix"]*block_matrices["block_kernel_matrix"]*block_matrices["block_moving_average_matrix"],
                                divided = block_matrices["block_green_matrix"],
                                side = "left",
                                cholesky = "no")
     driving_noise = np.matrix(np.random.normal(loc=0.0, scale=1.0, size=(number_points, 1)))
     sample = np.reshape(operator*driving_noise, newshape = (number_sources, number_time_points))
     return sample
Пример #3
0
 def __get_log_marginal_likelihood(self, covariance_matrix, data, time_series_index, jitter):
     log_marginal_likelihood = 0
     number_points = len(data[0][time_series_index,:])
     jittered_covariance_matrix = covariance_matrix + jitter*np.identity(number_points)
     cholesky_factor = np.linalg.cholesky(jittered_covariance_matrix)
     log_determinant = 2*np.sum(np.log(np.diag(cholesky_factor)))
     for sample in data:            
         time_series = sample[time_series_index,:].T
         whitened_time_series = matrix_division(divider = cholesky_factor,
                                                divided = np.reshape(time_series, (len(time_series),1)),
                                                side = "left",
                                                cholesky = "no")
         data_factor = whitened_time_series.T*whitened_time_series
         sample_log_marginal_likelihood = - 0.5*number_points*np.log(np.pi) - 0.5*log_determinant - 0.5*data_factor
         log_marginal_likelihood += sample_log_marginal_likelihood
     return log_marginal_likelihood
Пример #4
0
            def posterior_kernel_cij_temporal_parwrap(parallel_args_struct):
                """
                The bread-and-butter of the method.

                """     
                # unpack
                y = np.matrix(parallel_args_struct['Px_j']).T
                covariance_matrices = parallel_args_struct['cov']     
                observation_models = parallel_args_struct['obs_models']
                i = parallel_args_struct['i']
                j = parallel_args_struct['j']
                total_cov_matrix = self.__get_total_covariance_matrix(covariance_matrices, 
                                                                      observation_models, 
                                                                      j, 
                                                                      self.noise_level)   

                c_ij = covariance_matrices * observation_models[i].H  \
                       * matrix_division(divider = total_cov_matrix, divided = y, side = "left", cholesky = "no")

                return np.real(np.fft.fftshift(np.fft.ifft(np.fft.ifftshift(np.array(c_ij).flatten()), axis = 0)))