/** * @file CachedQuadraticDistances.cpp * @brief kernel function which needs quadratic distances between feature vectors * @author Erik Rodner * @date 01/20/2010 */ #include #include "CachedQuadraticDistances.h" using namespace std; using namespace NICE; using namespace OBJREC; void CachedQuadraticDistances::calcKernelData ( const VVector & vecSet, KernelData *kernelData ) const { //cerr << "CachedQuadraticDistances::calcKernelData()" << endl; Matrix *quadraticDistances = new Matrix ( vecSet.size(), vecSet.size() );; // FIXME: memory leak -> only if vecSet.size() is to big (ca. >>5000) int ii = 0; for ( VVector::const_iterator i = vecSet.begin(); i != vecSet.end(); i++, ii++ ) { const NICE::Vector & x = *i; int jj = ii; for ( VVector::const_iterator j = i; j != vecSet.end(); j++, jj++ ) { const NICE::Vector & y = *j; double distance = 0.0; for ( size_t k = 0 ; k < x.size() ; k++ ) { double diff = x[k] - y[k]; distance += diff*diff; } (*quadraticDistances)(ii, jj) = distance; (*quadraticDistances)(jj, ii) = distance; } } kernelData->setCachedMatrix ( KernelData::QUADRATIC_DISTANCES, quadraticDistances ); Kernel::calcKernelData ( vecSet, kernelData ); }