GPUMLib  0.2.2
GPU Machine Learning Library
NMFmultiplicativeEuclidian.h
1 /*
2  Noel Lopes is an Assistant Professor at the Polytechnic Institute of Guarda, Portugal
3  Copyright (C) 2009, 2010, 2011, 2012 Noel de Jesus Mendonša Lopes
4 
5  This file is part of GPUMLib.
6 
7  GPUMLib is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef GPUMLib_NMF_MultiplicativeEuclidian_h
22 #define GPUMLib_NMF_MultiplicativeEuclidian_h
23 
24 #include "BaseNMF.h"
25 #include "../common/Utilities.h"
26 
27 namespace GPUMLib {
28 
31 
34  private:
40 
41  int blocksH;
42  int blocksW;
43 
44  public:
50  NMF_MultiplicativeEuclidianDistance(HostMatrix<cudafloat> & v, int r) : NMF(v, r), WtV(r, v.Columns(), ColumnMajor), WtW(r, r, ColumnMajor), WtWH(r, v.Columns(), ColumnMajor), VHt(v.Rows(), r, ColumnMajor), WHHt(v.Rows(), r, ColumnMajor) {
51  blocksH = NumberBlocks(H.Elements(), SIZE_BLOCKS_NMF);
52  blocksW = NumberBlocks(W.Elements(), SIZE_BLOCKS_NMF);
53  }
54 
61  NMF_MultiplicativeEuclidianDistance(HostMatrix<cudafloat> & v, HostMatrix<cudafloat> & w, HostMatrix<cudafloat> & h) : NMF(v, w, h), WtV(w.Columns(), v.Columns(), ColumnMajor), WtW(w.Columns(), w.Columns(), ColumnMajor), WtWH(w.Columns(), v.Columns(), ColumnMajor), VHt(v.Rows(), h.Rows(), ColumnMajor), WHHt(v.Rows(), h.Rows(), ColumnMajor) {
62  blocksH = NumberBlocks(H.Elements(), SIZE_BLOCKS_NMF);
63  blocksW = NumberBlocks(W.Elements(), SIZE_BLOCKS_NMF);
64  }
65 
68  void DoIteration(bool updateW = true);
69 };
70 
72 
73 }
74 
75 #endif
Represents a Non-Negative Matrix Factorization (NMF) algorithm that uses multiplicative update rules ...
int Elements() const
Definition: BaseMatrix.h:94
NMF_MultiplicativeEuclidianDistance(HostMatrix< cudafloat > &v, HostMatrix< cudafloat > &w, HostMatrix< cudafloat > &h)
int NumberBlocks(int threads, int blockSize)
Definition: Utilities.h:49
NMF_MultiplicativeEuclidianDistance(HostMatrix< cudafloat > &v, int r)
Base class for all Non-Negative Matrix Factorization classes.
Definition: BaseNMF.h:40