Ignore:
Timestamp:
06/02/2009 11:15:10 AM (11 years ago)
Author:
dave
Message:

lots of code added - pca implementation for eigenfaces and lda started

File:
1 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/vision/src/Matrix.h

    r85 r86  
    1717#include <assert.h> 
    1818#include <iostream> 
     19#include "Vector.h" 
    1920 
    2021#ifndef FOAM_MATRIX 
    2122#define FOAM_MATRIX 
    2223 
    23 template<class T> 
     24template<class T>  
    2425class Matrix 
    2526{ 
    2627public: 
     28        Matrix(); 
    2729        Matrix(unsigned int r, unsigned int c); 
    2830        ~Matrix(); 
    2931        Matrix(const Matrix &other); 
    30          
     32        Matrix(unsigned int r, unsigned int c, float *data); 
     33 
    3134        // Row proxy classes to allow matrix[r][c] notation 
    3235        class Row 
     
    8790        T *GetRawData() { return m_Data; } 
    8891        const T *GetRawDataConst() const { return m_Data; } 
     92        Vector<T> GetRowVector(unsigned int r) const;  
     93        Vector<T> GetColVector(unsigned int c) const;  
    8994          
    9095        void Print() const; 
    9196        void SetAll(T s); 
     97        void Zero() { SetAll(0); } 
     98        bool IsInf(); 
    9299        Matrix Transposed(); 
    93100 
     
    120127 
    121128template<class T> 
     129Matrix<T>::Matrix() : 
     130m_Rows(0), 
     131m_Cols(0), 
     132m_Data(NULL) 
     133{ 
     134} 
     135 
     136template<class T> 
     137Matrix<T>::Matrix(unsigned int r, unsigned int c, float *data) : 
     138m_Rows(r), 
     139m_Cols(c), 
     140m_Data(data) 
     141{ 
     142} 
     143 
     144template<class T> 
    122145Matrix<T>::~Matrix() 
    123146{ 
     
    173196                } 
    174197        } 
     198} 
     199 
     200template<class T> 
     201bool Matrix<T>::IsInf() 
     202{ 
     203        for (unsigned int i=0; i<m_Rows; i++) 
     204        { 
     205                for (unsigned int j=0; j<m_Cols; j++) 
     206                { 
     207                        if (isinf((*this)[i][j])) return true; 
     208                        if (isnan((*this)[i][j])) return true; 
     209                } 
     210        } 
     211        return false; 
    175212} 
    176213 
     
    266303} 
    267304 
     305template<class T> 
     306Vector<T> Matrix<T>::GetRowVector(unsigned int r) const 
     307{ 
     308        assert(r<m_Rows); 
     309        Vector<T> ret(m_Cols); 
     310        for (unsigned int j=0; j<m_Cols; j++) 
     311        { 
     312                ret[j]=(*this)[r][j]; 
     313        } 
     314        return ret; 
     315} 
     316 
     317template<class T> 
     318Vector<T> Matrix<T>::GetColVector(unsigned int c) const 
     319{ 
     320        assert(c<m_Cols); 
     321        Vector<T> ret(m_Rows); 
     322        for (unsigned int i=0; i<m_Rows; i++) 
     323        { 
     324                ret[i]=(*this)[i][c]; 
     325        } 
     326        return ret; 
     327} 
    268328 
    269329template<class T> 
Note: See TracChangeset for help on using the changeset viewer.