PLearn 0.1
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Types
PLearn::SDBVMFieldRemapIntervals Class Reference

#include <SDBVMat.h>

Inheritance diagram for PLearn::SDBVMFieldRemapIntervals:
Inheritance graph
[legend]
Collaboration diagram for PLearn::SDBVMFieldRemapIntervals:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 SDBVMFieldRemapIntervals (SDBVMSource source, const string &mappings, real other_values_mapping=MISSING_VALUE, real missing_values_mapping=MISSING_VALUE, SDBVMOutputCoding oc=SDBVMNumeric, VMField::FieldType ft=VMField::DiscrGeneral)
virtual real getDiscreteValue (const SDBWithStats &sdb, const Row &row) const
 Perform the actual remapping.

Static Public Member Functions

static void getIntervals (const string &mappings, bool &all_int, real &max_of_map, Vec &intervals_x, Vec &intervals_y)

Protected Attributes

Vec intervals_x_
Vec intervals_y_
real other_values_mapping_

Private Types

typedef SDBVMFieldDiscrete inherited

Detailed Description

A field that remaps intervals on the reals onto discrete integer values. The format of the "mappings" argument is: "y_0 x_1 y_1 x_2 y_2 ... x_N y_N", where the "x_i" are cut-points for X, with for the value y_i obtained when x_i <= X < x_{i+1}, and y_0 obtained for X<x_1, and y_N obtained for X >= y_N. It is required that x_i < x_{i+1}.

Definition at line 815 of file SDBVMat.h.


Member Typedef Documentation

Reimplemented from PLearn::SDBVMFieldDiscrete.

Definition at line 817 of file SDBVMat.h.


Constructor & Destructor Documentation

PLearn::SDBVMFieldRemapIntervals::SDBVMFieldRemapIntervals ( SDBVMSource  source,
const string &  mappings,
real  other_values_mapping = MISSING_VALUE,
real  missing_values_mapping = MISSING_VALUE,
SDBVMOutputCoding  oc = SDBVMNumeric,
VMField::FieldType  ft = VMField::DiscrGeneral 
)

Definition at line 868 of file SDBVMat.cc.

References getIntervals(), PLearn::SDBVMOutputCoder::handleOtherAndMissing(), intervals_x_, intervals_y_, and PLearn::SDBVMFieldDiscrete::setNumClasses().

    : inherited(source, 0, missing_values_mapping, oc, ft),
      other_values_mapping_(other_values_mapping)
{
    real max_of_map;
    bool all_int;
    getIntervals(mappings, all_int, max_of_map, intervals_x_, intervals_y_);

    // Initialize base-class member
    setNumClasses(SDBVMOutputCoder::handleOtherAndMissing(
                      all_int, int(max_of_map), other_values_mapping, missing_values_mapping));
}

Here is the call graph for this function:


Member Function Documentation

real PLearn::SDBVMFieldRemapIntervals::getDiscreteValue ( const SDBWithStats sdb,
const Row row 
) const [virtual]

Perform the actual remapping.

Implements PLearn::SDBVMFieldDiscrete.

Definition at line 886 of file SDBVMat.cc.

References PLearn::binary_search(), PLearn::SDBVMSource::getValue(), intervals_x_, intervals_y_, PLearn::FieldValue::isMissing(), PLearn::SDBVMField::missing_values_mapping_, and PLearn::SDBVMFieldSource1::source_.

{
    FieldValue v = source_.getValue(sdb,row);
    if(v.isMissing()) 
        return missing_values_mapping_;
    else
        return intervals_y_[1+int(binary_search(intervals_x_,real(v)))];
}

Here is the call graph for this function:

void PLearn::SDBVMFieldRemapIntervals::getIntervals ( const string &  mappings,
bool all_int,
real max_of_map,
Vec intervals_x,
Vec intervals_y 
) [static]

This parses the remapping string and returns a map. Whether the target values are all non-negative integers is set in all_int. The maximum target value in the map is set into max_of_map. The intervals are returned in intervals_x and intervals_y

Definition at line 820 of file SDBVMat.cc.

References i, in, PLearn::TVec< T >::length(), PLearn::max(), PLERROR, and PLearn::TVec< T >::resize().

Referenced by SDBVMFieldRemapIntervals().

{
    all_int = true;
    max_of_map = -FLT_MAX;
    istrstream in(mappings.c_str());
    real xi, yi;
    intervals_x.resize(10);
    intervals_y.resize(11);
    
    int i;
    for(i=0; ; ++i) {
        in >> yi;
        if(!in)
            PLERROR("In NGSDBVMFieldRemapIntervals::getIntervals: "
                    "mappings should have an odd number of elements, found %d",
                    2*i);
        intervals_y[i] = yi;
        if (all_int && yi >= 0 && yi == int(yi))
            max_of_map = std::max(max_of_map, yi);
        else
            all_int = false;

        in >> xi;
        if(!in)
            break;
        if (i>0 && intervals_x[i-1]>=xi)
            PLERROR("In NGSDBVMFieldRemapIntervals::getIntervals: "
                    "mappings needs x_{i-1}<x_i, found x[%d]=%f, x[%d]=%f",
                    i-1,intervals_x[i-1],i,xi);
        intervals_x[i] = xi;
        if (intervals_x.length()==i+1) {
            intervals_x.resize(2*i);
            intervals_y.resize(2*i+1);
        }
    }

    /*NOTE: this used to be a BUG!!! the following used to be:
      intervals_x.resize(i-1);
      intervals_y.resize(i);
      which made both vectors 1 too short... 
      ...no value would ever fall in the last class
    */
    intervals_x.resize(i);
    intervals_y.resize(i+1);
}

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Definition at line 840 of file SDBVMat.h.

Referenced by getDiscreteValue(), and SDBVMFieldRemapIntervals().

Definition at line 841 of file SDBVMat.h.

Referenced by getDiscreteValue(), and SDBVMFieldRemapIntervals().

Definition at line 842 of file SDBVMat.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines