Ignore:
Timestamp:
Feb 27, 2008, 1:06:55 AM (14 years ago)
Author:
Peter
Message:

removing DataLookup2D closes ticket:243

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/classifier/MatrixLookupWeighted.cc

    r1169 r1170  
    2727#include "yat/utility/Matrix.h"
    2828
    29 #include <algorithm>
    3029#include <cassert>
    3130#include <fstream>
     31#include <vector>
    3232
    3333namespace theplu {
     
    4444    row_index_ = utility::Index(data.rows());
    4545    column_index_ = utility::Index(data.columns());
     46    assert(validate());
    4647  }
    4748
    4849
    4950  MatrixLookupWeighted::MatrixLookupWeighted(const utility::Matrix& data)
    50     : DataLookup2D(), data_(MatrixP(&data, false))
     51    : data_(MatrixP(&data, false))
    5152  {
    5253    utility::Matrix weights;
     
    5556    row_index_ = utility::Index(data.rows());
    5657    column_index_ = utility::Index(data.columns());
     58    assert(validate());
    5759  }
    5860
    5961
    6062  MatrixLookupWeighted::MatrixLookupWeighted(const MatrixLookup& ml)
    61     : DataLookup2D(ml), data_(ml.data_)
    62   {
    63     weights_= MatrixP(new utility::Matrix(data_->rows(), data_->columns(),1.0));
     63    : column_index_(ml.column_index_), data_(ml.data_),
     64      row_index_(ml.row_index_),
     65      weights_(MatrixP(new utility::Matrix(data_->rows(),data_->columns(),1.0)))
     66  {
     67    assert(validate());
    6468  }
    6569 
     
    6973                                             const utility::Index& row,
    7074                                             const utility::Index& col)
    71     : DataLookup2D(row,col), data_(MatrixP(new utility::Matrix(data), false)),
    72       weights_(MatrixP(new utility::Matrix(weights), false))
    73   {
     75    : column_index_(col), data_(MatrixP(new utility::Matrix(data), false)),
     76      row_index_(row), weights_(MatrixP(new utility::Matrix(weights), false))
     77  {
     78    assert(validate());
    7479  }
    7580 
     
    8085                                             const utility::Index& index,
    8186                                             const bool row)
    82     : DataLookup2D(), data_(MatrixP(new utility::Matrix(data), false)),
     87    : data_(MatrixP(new utility::Matrix(data), false)),
    8388      weights_(MatrixP(new utility::Matrix(weights), false))
    8489  {
     
    9398      row_index_ = utility::Index(data.rows());
    9499    }
     100    assert(validate());
    95101  }
    96102 
     
    106112
    107113  MatrixLookupWeighted::MatrixLookupWeighted(const MatrixLookupWeighted& other)
    108     : DataLookup2D(other), data_(other.data_), weights_(other.weights_)
    109   {
     114    : column_index_(other.column_index_), data_(other.data_),
     115      row_index_(other.row_index_), weights_(other.weights_)
     116  {
     117    assert(validate());
    110118  }
    111119
     
    115123                                             const utility::Index& row,
    116124                                             const utility::Index& col)
    117     : DataLookup2D(other,row,col), data_(other.data_), weights_(other.weights_)
    118   {
     125    : column_index_(utility::Index(other.column_index_, col)),
     126      data_(other.data_), row_index_(utility::Index(other.row_index_, row)),
     127      weights_(other.weights_)
     128  {
     129    assert(validate());
    119130  }
    120131 
     
    124135                                             const utility::Index& index,
    125136                                             bool row)
    126     : DataLookup2D(other,index,row), data_(other.data_),
     137    : data_(other.data_),
    127138      weights_(other.weights_)
    128139  {
     140    if (row){
     141      row_index_ = utility::Index(other.row_index_, index);
     142      column_index_= other.column_index_;
     143    }
     144    else{
     145      column_index_ = utility::Index(other.column_index_, index);
     146      row_index_= other.row_index_;
     147    }
     148    assert(validate());
    129149  }
    130150 
     
    135155                                             const double value,
    136156                                             const double weight)
    137     : DataLookup2D(rows,columns),
     157    : column_index_(utility::Index(std::vector<size_t>(rows, 0))),
    138158      data_(MatrixP(new utility::Matrix(1,1,value))),
     159      row_index_(utility::Index(std::vector<size_t>(columns, 0))),
    139160      weights_(MatrixP(new utility::Matrix(1,1,weight)))
    140161  {
     162    assert(validate());
    141163  }
    142164
    143165 
    144166  MatrixLookupWeighted::MatrixLookupWeighted(std::istream& is, char sep)
    145     : DataLookup2D()
    146   {
    147     data_ = MatrixP(new utility::Matrix(is,sep));
     167    : data_(MatrixP(new utility::Matrix(is,sep)))
     168  {
     169    column_index_ = utility::Index(data_->columns());
    148170    row_index_ = utility::Index(data_->rows());
    149     column_index_ = utility::Index(data_->columns());
    150171    utility::Matrix weights;
    151172    utility::nan(*data_,weights);
    152173    // Peter, should be possible to avoid this copying
    153174    weights_= MatrixP(new utility::Matrix(weights));
     175    assert(validate());
    154176  }
    155177 
     
    183205
    184206
     207  size_t MatrixLookupWeighted::columns(void) const
     208  {
     209    return column_index_.size();
     210  }
     211
     212
    185213  double MatrixLookupWeighted::data(size_t row, size_t column) const
    186214  {
     215    assert(row<rows());
     216    assert(column<columns());
     217    assert(row_index_[row]<data_->rows());
     218    assert(column_index_[column]<data_->columns());
    187219    return (*data_)(row_index_[row], column_index_[column]);
    188220  }
     
    212244
    213245
     246  size_t MatrixLookupWeighted::rows(void) const
     247  {
     248    return row_index_.size();
     249  }
     250
     251
     252  bool MatrixLookupWeighted::validate(void) const
     253  {
     254    for (size_t i=0; i<row_index_.size(); ++i)
     255      if (row_index_[i]>=data_->rows())
     256        return false;
     257    for (size_t i=0; i<column_index_.size(); ++i)
     258      if (column_index_[i]>=data_->columns())
     259        return false;
     260    for (size_t i=0; i<row_index_.size(); ++i)
     261      if (row_index_[i]>=weights_->rows())
     262        return false;
     263    for (size_t i=0; i<column_index_.size(); ++i)
     264      if (column_index_[i]>=weights_->columns())
     265        return false;
     266    return true;
     267  }
     268
     269
    214270  double MatrixLookupWeighted::weight(size_t row, size_t column) const
    215271  {
     272    assert(row<rows());
     273    assert(column<columns());
     274    assert(row_index_[row]<weights_->rows());
     275    assert(column_index_[column]<weights_->columns());
    216276    return (*weights_)(row_index_[row], column_index_[column]);
    217277  }
     
    238298  {
    239299    if (this!=&other){
    240       DataLookup2D::operator=(other);
     300      column_index_=other.column_index_;
     301      row_index_=other.row_index_;
    241302      data_ = other.data_;
    242303      weights_ = other.weights_;
    243304    }
     305    assert(validate());
    244306    return *this;
    245307  }
Note: See TracChangeset for help on using the changeset viewer.