Kernel.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * @file Kernel.cpp
  3. * @brief Interface for Mercer Kernels
  4. * @author Erik Rodner
  5. * @date 10/24/2007
  6. */
  7. #include <iostream>
  8. #include "vislearning/math/distances/Kernel.h"
  9. using namespace OBJREC;
  10. using namespace std;
  11. using namespace NICE;
  12. Kernel::Kernel( bool _symmetric )
  13. {
  14. symmetric = _symmetric;
  15. }
  16. Kernel::~Kernel()
  17. {
  18. }
  19. void Kernel::calcGramMatrix ( const VVector & vecSet, NICE::Matrix & G ) const
  20. {
  21. G.resize(vecSet.size(), vecSet.size());
  22. if ( symmetric )
  23. {
  24. int ii = 0;
  25. for ( VVector::const_iterator i = vecSet.begin();
  26. i != vecSet.end();
  27. i++, ii++ )
  28. {
  29. const NICE::Vector & x = *i;
  30. int jj = ii;
  31. for ( VVector::const_iterator j = i;
  32. j != vecSet.end();
  33. j++, jj++ )
  34. {
  35. const NICE::Vector & y = *j;
  36. double kval = K(x,y);
  37. G(ii, jj) = kval;
  38. G(jj, ii) = kval;
  39. }
  40. }
  41. } else {
  42. int ii = 0;
  43. for ( VVector::const_iterator i = vecSet.begin();
  44. i != vecSet.end();
  45. i++, ii++ )
  46. {
  47. const NICE::Vector & x = *i;
  48. int jj = 0;
  49. for ( VVector::const_iterator j = vecSet.begin();
  50. j != vecSet.end();
  51. j++, jj++ )
  52. {
  53. const NICE::Vector & y = *j;
  54. double kval = K(x,y);
  55. G(ii, jj) = kval;
  56. }
  57. }
  58. }
  59. }
  60. void Kernel::calcKernelVector ( const VVector & vecSet, const NICE::Vector & y, NICE::Vector & kstar ) const
  61. {
  62. kstar.resize(vecSet.size());
  63. int ii = 0;
  64. for ( VVector::const_iterator i = vecSet.begin();
  65. i != vecSet.end();
  66. i++, ii++ )
  67. {
  68. const NICE::Vector & x = *i;
  69. double kval = K(x, y);
  70. kstar[ii] = kval;
  71. }
  72. }