CachedQuadraticDistances.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * @file CachedQuadraticDistances.cpp
  3. * @brief kernel function which needs quadratic distances between feature vectors
  4. * @author Erik Rodner
  5. * @date 01/20/2010
  6. */
  7. #include <iostream>
  8. #include "CachedQuadraticDistances.h"
  9. using namespace std;
  10. using namespace NICE;
  11. using namespace OBJREC;
  12. void CachedQuadraticDistances::calcKernelData ( const VVector & vecSet, KernelData *kernelData ) const
  13. {
  14. //cerr << "CachedQuadraticDistances::calcKernelData()" << endl;
  15. Matrix *quadraticDistances = new Matrix ( vecSet.size(), vecSet.size() );;
  16. // FIXME: memory leak -> only if vecSet.size() is to big (ca. >>5000)
  17. int ii = 0;
  18. for ( VVector::const_iterator i = vecSet.begin();
  19. i != vecSet.end();
  20. i++, ii++ )
  21. {
  22. const NICE::Vector & x = *i;
  23. int jj = ii;
  24. for ( VVector::const_iterator j = i;
  25. j != vecSet.end();
  26. j++, jj++ )
  27. {
  28. const NICE::Vector & y = *j;
  29. double distance = 0.0;
  30. for ( size_t k = 0 ; k < x.size() ; k++ )
  31. {
  32. double diff = x[k] - y[k];
  33. distance += diff*diff;
  34. }
  35. (*quadraticDistances)(ii, jj) = distance;
  36. (*quadraticDistances)(jj, ii) = distance;
  37. }
  38. }
  39. kernelData->setCachedMatrix ( KernelData::QUADRATIC_DISTANCES, quadraticDistances );
  40. Kernel::calcKernelData ( vecSet, kernelData );
  41. }