kernel_matrix_generator.h
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #include "fastlib/fastlib.h"
00033 
00034 int main(int argc, char *argv[]) {
00035 
00036   
00037   fx_init(argc, argv, &kde_main_doc);
00038   
00039   Matrix references;
00040   const char *references_file_name = fx_param_str_req(fx_root, "data");
00041   double bandwidth = fx_param_double_req(fx_root, "bandwidth");
00042   data::Load(references_file_name, &references);
00043   
00044   
00045   Matrix kernel_matrix;
00046 
00047   
00048   GaussianKernel kernel;
00049   kernel.Init(bandwidth);
00050 
00051   kernel_matrix.Init(references.n_cols(), references.n_cols());
00052   for(index_t r = 0; r < references.n_cols(); r++) {
00053     const double *r_col = references.GetColumnPtr(r);
00054 
00055     for(index_t q = 0; q < references.n_cols(); q++) {
00056       
00057       double dsqd = la::DistanceSqEuclidean(references.n_rows(), q_col,
00058                                             r_col);
00059       const double *q_col = references.GetColumnPtr(q);
00060       kernel_matrix.set(q, r, kernel.EvalUnnormOnSq(dsqd));
00061     }
00062   }
00063 
00064   
00065   const char *file_name = "kernel_matrix.txt";
00066   FILE *output_file = fopen(file_name, "w+");
00067   for(index_t r = 0; r < references.n_cols(); r++) {
00068     for(index_t c = 0; c < references.n_cols(); c++) {
00069       fprintf(output_file, "%g ", kernel_matrix.get(c, r));
00070     }
00071     fprintf(output_file, "\n");
00072   }
00073 
00074   fx_done(fx_root);
00075   return 0;
00076 }