source: trunk/yat/classifier/MatrixLookup.cc @ 1169

Last change on this file since 1169 was 1169, checked in by Peter, 14 years ago

refs #343 moving data to inherited classes and using SmartPtr?.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date ID
File size: 4.6 KB
Line 
1// $Id$
2
3/*
4  Copyright (C) 2005 Markus Ringnér, Peter Johansson
5  Copyright (C) 2006 Jari Häkkinen, Markus Ringnér, Peter Johansson
6  Copyright (C) 2007 Peter Johansson
7
8  This file is part of the yat library, http://trac.thep.lu.se/yat
9
10  The yat library is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License as
12  published by the Free Software Foundation; either version 2 of the
13  License, or (at your option) any later version.
14
15  The yat library is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23  02111-1307, USA.
24*/
25
26#include "MatrixLookup.h"
27#include "yat/utility/Matrix.h"
28
29#include <algorithm>
30#include <cassert>
31#include <fstream>
32
33namespace theplu {
34namespace yat {
35namespace classifier {
36
37  MatrixLookup::MatrixLookup(const utility::Matrix& data, const bool own)
38    : DataLookup2D(own), data_(MatrixP(&data, own))
39  {
40    column_index_ = utility::Index(data.columns());
41    row_index_ = utility::Index(data.rows());
42  }
43 
44
45
46  MatrixLookup::MatrixLookup(const utility::Matrix& data, 
47                             const utility::Index& row, 
48                             const utility::Index& col)
49    : DataLookup2D(row,col), data_(MatrixP(&data, false))
50  {
51  }
52 
53
54
55  MatrixLookup::MatrixLookup(const utility::Matrix& data, 
56                             const utility::Index& index, 
57                             const bool row)
58    : DataLookup2D(), data_(MatrixP(&data, false))
59  {
60    if (row){
61      row_index_=index;
62      column_index_ = utility::Index(data.columns());
63    }
64    else{
65      column_index_=index;
66      row_index_ = utility::Index(data.rows());
67    }
68  }
69 
70
71
72  MatrixLookup::MatrixLookup(const MatrixLookup& other)
73    : DataLookup2D(other), data_(other.data_)
74  {
75  }
76
77
78
79  MatrixLookup::MatrixLookup(const MatrixLookup& other, 
80                             const utility::Index& row, 
81                             const utility::Index& col)
82    : DataLookup2D(other,row,col), data_(other.data_)
83  {
84  }
85 
86
87
88  MatrixLookup::MatrixLookup(const MatrixLookup& other, 
89                             const utility::Index& index, bool row)
90    : DataLookup2D(other,index,row), data_(other.data_)
91  {
92  }
93 
94
95
96  MatrixLookup::MatrixLookup(const size_t rows, const size_t columns, 
97                             const double value)
98    : DataLookup2D(rows,columns) 
99  {
100    data_ = MatrixP(new utility::Matrix(1,1,value));
101  }
102
103
104  MatrixLookup::MatrixLookup(std::istream& is, char sep)
105    : DataLookup2D()
106  {
107    data_ = MatrixP(new utility::Matrix(is,sep));
108    row_index_ = utility::Index(data_->rows());
109    column_index_ = utility::Index(data_->columns());
110  }
111
112
113  MatrixLookup::~MatrixLookup(void)
114  {
115  }
116
117
118  MatrixLookup::const_iterator MatrixLookup::begin(void) const
119  {
120    return const_iterator(const_iterator::iterator_type(*this, 0, 0), 1);
121  }
122
123
124  MatrixLookup::const_column_iterator MatrixLookup::begin_column(size_t i) const
125  {
126    return const_column_iterator(const_column_iterator::iterator_type(*this, 0,
127                                                                      i),
128                                 columns());
129  }
130
131
132  MatrixLookup::const_row_iterator MatrixLookup::begin_row(size_t i) const
133  {
134    return const_row_iterator(const_row_iterator::iterator_type(*this,i,0), 1);
135  }
136
137
138  MatrixLookup::const_iterator MatrixLookup::end(void) const
139  {
140    return const_iterator(const_iterator::iterator_type(*this, rows(), 0), 1);
141  }
142
143
144  MatrixLookup::const_column_iterator MatrixLookup::end_column(size_t i) const
145  {
146    return 
147      const_column_iterator(const_column_iterator::iterator_type(*this,rows(),
148                                                                      i), 
149                            columns());
150  }
151
152
153  MatrixLookup::const_row_iterator MatrixLookup::end_row(size_t i) const
154  {
155    return const_row_iterator(const_row_iterator::iterator_type(*this,i+1,0),1);
156  }
157
158
159  bool MatrixLookup::weighted(void) const 
160  {
161    return false;
162  }
163
164
165
166  double MatrixLookup::operator()(const size_t row, const size_t column) const
167  {
168    assert(row<rows());
169    assert(column<columns());
170    return (*data_)(row_index_[row], column_index_[column]);
171  }
172
173
174
175  const MatrixLookup& MatrixLookup::operator=(const MatrixLookup& other)
176  {
177    if (this!=&other){
178      DataLookup2D::operator=(other);
179      data_ = other.data_;
180    }
181    return *this;
182  }
183
184
185  std::ostream& operator<<(std::ostream& s, const MatrixLookup& m)
186  {
187    s.setf(std::ios::dec);
188    s.precision(12);
189    for(size_t i=0, j=0; i<m.rows(); i++)
190      for (j=0; j<m.columns(); j++) {
191        s << m(i,j);
192        if (j<m.columns()-1)
193          s << s.fill();
194        else if (i<m.rows()-1)
195          s << "\n";
196      }
197    return s;
198  }
199
200
201
202}}} // of namespace classifier, yat, and theplu
Note: See TracBrowser for help on using the repository browser.