source: trunk/c++_tools/classifier/Kernel.cc @ 658

Last change on this file since 658 was 658, checked in by Peter, 15 years ago

added function in KernelLookup? to create a KernelLookup? from inner data and outer (passed) data.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date ID
File size: 1.7 KB
Line 
1// $Id$
2
3#include <c++_tools/classifier/Kernel.h>
4
5#include <c++_tools/classifier/DataLookup1D.h>
6#include <c++_tools/classifier/DataLookupWeighted1D.h>
7#include <c++_tools/classifier/KernelFunction.h>
8#include <c++_tools/classifier/MatrixLookup.h>
9
10#include <vector>
11
12namespace theplu {
13namespace classifier {
14
15  Kernel::Kernel(const MatrixLookup& data, const KernelFunction& kf, 
16                 const bool own) 
17    : data_(&data), data_w_(0), kf_(&kf), data_owner_(own), 
18      weight_owner_(false)
19  {
20  }
21
22
23  Kernel::Kernel(const MatrixLookupWeighted& data, const KernelFunction& kf,
24                 const bool own) 
25    : data_(&data), data_w_(&data), kf_(&kf), data_owner_(own), 
26      weight_owner_(own)
27  {
28  }
29
30
31  Kernel::Kernel(const Kernel& other, const std::vector<size_t>& index)
32    : kf_(other.kf_), data_owner_(true)
33  {
34    data_ = other.data_->selected(index);
35    if (other.data_w_){
36      data_w_ = other.data_w_->selected(index);
37      weight_owner_=true;
38    }
39    else{
40      data_w_=NULL;
41      weight_owner_=false;
42    }
43
44  }
45
46  Kernel::~Kernel()
47  {
48    if (data_owner_)
49      delete data_;
50     
51    if (weight_owner_)
52      if (data_w_)
53        delete data_w_;
54      else 
55        std::cerr << "Error in Kernel implementation: probably a constructor"
56                  << std::endl;
57   
58  }
59
60 
61  double Kernel::element(const DataLookup1D& vec, const size_t i) const
62  {
63    if (data_w_)
64      return kf_->operator()(vec, DataLookupWeighted1D(*data_w_,i, false)); 
65    else
66      return kf_->operator()(vec, DataLookup1D(*data_,i, false)); 
67  }
68
69
70  double Kernel::element(const DataLookupWeighted1D& vec, const size_t i) const
71  {
72    if (data_w_)
73      return kf_->operator()(vec, DataLookupWeighted1D(*data_w_,i, false)); 
74    else
75      return kf_->operator()(vec, DataLookup1D(*data_,i, false)); 
76  }
77
78}} // of namespace classifier and namespace theplu
Note: See TracBrowser for help on using the repository browser.