Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members  

Matrix.cxx

Go to the documentation of this file.
00001 #include "AtlfastUtils/Matrix.h"
00002 #include <cstddef>
00003 #include <assert.h>
00004 namespace Atlfast{
00005   Matrix::Matrix(size_t x, size_t y){
00006     m_d1=x;
00007     m_d2=y;
00008     m_v=new valarray<double>(x*y);
00009   }
00010 
00011   Matrix::Matrix(size_t x, size_t y, double init){
00012     m_d1=x;
00013     m_d2=y;
00014     m_v=new valarray<double>(x*y);
00015     for(size_t i=0; i<m_d1*m_d2; ++i)  m_v[i]=init;
00016   }
00017 
00018   double& Matrix::operator()(size_t x, size_t y){
00019     return column(x)[y];
00020   }
00021 
00022   double mul(const Cslice_iter<double>& v1, 
00023              const valarray<double>& v2){
00024     double res=0;
00025     for( size_t i=0; i<v2.size(); i++) res+=v1[i]*v2[i];
00026     return res;
00027   }
00028 
00029   valarray<double> operator*(const Matrix&m, const valarray<double>&v){
00030     valarray<double> res(m.dim2());
00031     for(size_t i=0; i<m.dim2(); i++) res[i]=mul(m.row(i), v);
00032     return res;
00033   }
00034 
00035   Matrix& Matrix::operator*=(double d){
00036     (*m_v) *= d;
00037     return *this;
00038   }
00039   Matrix Matrix::sub(int minRow, int maxRow, 
00040                      int minCol, int maxCol) const{
00041     int endRow=maxRow+1;
00042     int endCol=maxCol+1;
00043 
00044     assert(minRow>=0);
00045     assert(minCol>=0);
00046     assert(endRow<=m_d1);
00047     assert(endCol<=m_d2);
00048 
00049     int nRow=endRow-minRow;
00050     assert(nRow>0);
00051     
00052     int nCol=endCol-minCol;
00053     assert(nCol>0);
00054 
00055     Matrix m(nRow, nCol);
00056     int ii=0;
00057     int jj;
00058     for(int i = minRow; i<endRow; ++i){
00059       jj=0;
00060       for(int j = minCol; j<endCol; ++j) m[ii][jj++]=(*this)[i][j];
00061       ++ii;
00062     }
00063     assert(ii == endRow);
00064     assert(jj == endCol);
00065     return m;
00066   }
00067   void Matrix::sub(int minRow, int minCol, Matrix& m) const{
00068     int endRow=minRow+m.m_d1;
00069     int endCol=minCol+m.m_d2;
00070 
00071     assert(minRow>=0);
00072     assert(minCol>=0);
00073     assert(endRow<=m_d1);
00074     assert(endCol<=m_d2);
00075 
00076     int nRow=endRow-minRow;
00077     assert(nRow>0);
00078     
00079     int nCol=endCol-minCol;
00080     assert(nCol>0);
00081 
00082     int ii=0;
00083     int jj;
00084     for(int i = minRow; i<endRow; ++i){
00085       jj=0;
00086       for(int j = minCol; j<endCol; ++j) m[ii][jj++]=(*this)[i][j];
00087       ++ii;
00088     }
00089     assert(ii == endRow);
00090     assert(jj == endCol);
00091     return;
00092   }
00093 }//namespace
00094 
00095 
00096 
00097 
00098 
00099 
00100 

Generated on Wed Jan 15 11:00:29 2003 for AtlfastUtils by doxygen1.3-rc1