Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

RBF.h

00001 // Copyright (C) 1999 Jean-Marc Valin
00002 
00003 #ifndef RBF_H
00004 #define RBF_H
00005 
00006 #include <vector>
00007 #include <iostream>
00008 #include "Object.h"
00009 #include "kmeans.h"
00010 
00011 namespace FD {
00012 
00013 class RBF : public KMeans {
00014   public:
00015    static float mahalanobis (const float *x, const float *c, const float *y, int len)
00016    {
00017       float sum1=0,sum2=0,sum3=0,sum4=0;
00018       const float *end = x+len;
00019       while (x<end-3)
00020       {
00021          sum1 += *c++ *(*x-*y)*(*x-*y);
00022          x++; y++;
00023          sum2 += *c++ *(*x-*y)*(*x-*y);
00024          x++; y++;
00025          sum3 += *c++ *(*x-*y)*(*x-*y);
00026          x++; y++;
00027          sum4 += *c++ *(*x-*y)*(*x-*y);
00028          x++; y++;
00029       }
00030        while (x<end)
00031        {
00032          sum1 += *c++ *(*x-*y)*(*x-*y);
00033          x++; y++;
00034        }
00035       return (sum1+sum2)+(sum3+sum4);
00036    }
00037 
00038 protected:
00039    std::vector<std::vector<float> > covar;
00040    
00041    
00042 public:
00043    explicit RBF (float (*_dist)(const float *, const float*, int) = euclidian)
00044       : KMeans(_dist)
00045    {}
00046 
00047    void train (int codeSize, const std::vector<float *> &data/*, const std::vector<float *> &data_out*/, int len, bool binary=false);
00048    
00049    void calcDist (const float *v, float *dist_return) const;
00050 
00051    void printOn(std::ostream &out=std::cout) const;
00052    void readFrom (std::istream &in=std::cin);
00053    friend std::istream &operator >> (std::istream &in, RBF &mdl);
00054 };
00055 }//namespace FD
00056 #endif

Generated on Wed Oct 5 14:28:56 2005 for FlowDesigner by  doxygen 1.4.4