dlib C++ Library - function_objects.h

// Copyright (C) 2010 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_MR_FUNCTION_ObJECTS_Hh_
#define DLIB_MR_FUNCTION_ObJECTS_Hh_
#include "function_objects_abstract.h"
#include "../matrix.h"
#include "../svm/sparse_vector.h"
#include <cmath>
#include <limits>
namespace dlib
{
// ----------------------------------------------------------------------------------------
 struct squared_euclidean_distance
 {
 squared_euclidean_distance (
 ) : 
 lower(0),
 upper(std::numeric_limits<double>::infinity())
 {}
 squared_euclidean_distance (
 const double l,
 const double u
 ) :
 lower(l),
 upper(u)
 {}
 const double lower;
 const double upper;
 template <typename sample_type>
 double operator() (
 const sample_type& a,
 const sample_type& b
 ) const
 { 
 const double len = length_squared(a-b);
 if (lower <= len && len <= upper)
 return len;
 else
 return std::numeric_limits<double>::infinity();
 }
 };
// ----------------------------------------------------------------------------------------
 struct cosine_distance 
 {
 template <typename sample_type>
 double operator() (
 const sample_type& a,
 const sample_type& b
 ) const
 { 
 const double temp = length(a)*length(b);
 if (temp == 0)
 return 0;
 else
 return 1-dot(a,b)/temp;
 }
 };
// ----------------------------------------------------------------------------------------
 struct negative_dot_product_distance 
 {
 template <typename sample_type>
 double operator() (
 const sample_type& a,
 const sample_type& b
 ) const
 { 
 return -dot(a,b);
 }
 };
// ----------------------------------------------------------------------------------------
 struct use_weights_of_one 
 {
 template <typename edge_type>
 double operator() (
 const edge_type&
 ) const
 { 
 return 1;
 }
 };
// ----------------------------------------------------------------------------------------
 struct use_gaussian_weights 
 {
 use_gaussian_weights (
 ) 
 {
 gamma = 0.1;
 }
 use_gaussian_weights (
 double g
 )
 {
 gamma = g;
 }
 double gamma;
 template <typename edge_type>
 double operator() (
 const edge_type& e
 ) const
 { 
 return std::exp(-gamma*e.distance());
 }
 };
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_MR_FUNCTION_ObJECTS_Hh_

AltStyle によって変換されたページ (->オリジナル) /