Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
CpuMatrix.cxx
Go to the documentation of this file.
1 // @(#)root/tmva/tmva/dnn:$Id$
2 // Author: Simon Pfreundschuh 19/07/16
3 
4 /*************************************************************************
5  * Copyright (C) 2016, Simon Pfreundschuh *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /////////////////////////////////////////////
13 // Implementation of the TCpuMatrix class. //
14 /////////////////////////////////////////////
15 
17 
18 namespace TMVA {
19 namespace DNN {
20 
21 //____________________________________________________________________________
22 template<typename AReal>
23 TCpuMatrix<AReal>::TCpuMatrix(size_t nRows, size_t nCols)
24  : fBuffer(nRows * nCols), fNCols(nCols), fNRows(nRows)
25 {
26  Initialize();
27  for (size_t j = 0; j < fNCols; j++) {
28  for (size_t i = 0; i < fNRows; i++) {
29  (*this)(i, j) = 0;
30  }
31  }
32 }
33 
34 //____________________________________________________________________________
35 template<typename AReal>
36 TCpuMatrix<AReal>::TCpuMatrix(const TMatrixT<AReal> & B)
37  : fBuffer(B.GetNoElements()), fNCols(B.GetNcols()), fNRows(B.GetNrows())
38 {
39  Initialize();
40  for (size_t j = 0; j < fNCols; j++) {
41  for (size_t i = 0; i < fNRows; i++) {
42  (*this)(i,j) = B(i,j);
43  }
44  }
45 }
46 
47 //____________________________________________________________________________
48 template<typename AReal>
49 TCpuMatrix<AReal>::TCpuMatrix(const TCpuBuffer<AReal> & buffer,
50  size_t m,
51  size_t n)
52  : fBuffer(buffer), fNCols(n), fNRows(m)
53 {
54  Initialize();
55 }
56 
57 //____________________________________________________________________________
58 template<typename AReal>
59 TCpuMatrix<AReal>::operator TMatrixT<AReal>() const
60 {
61  TMatrixT<AReal> B(fNRows, fNCols);
62 
63  for (size_t j = 0; j < fNCols; j++) {
64  for (size_t i = 0; i < fNRows; i++) {
65  B(i,j) = (*this)(i, j);
66  }
67  }
68  return B;
69 }
70 
71 
72 //____________________________________________________________________________
73 template<typename AReal>
74 void TCpuMatrix<AReal>::Initialize()
75 {
76  if (fNRows > fOnes.size()) {
77  fOnes.reserve(fNRows);
78  size_t ifirst = fOnes.size();
79  for (size_t i = ifirst; i < fNRows; i++) {
80  fOnes.push_back(1.0);
81  }
82  }
83 }
84 
85 //____________________________________________________________________________
86 template<typename AReal>
87 void TCpuMatrix<AReal>::InitializeOneVector(size_t n)
88 {
89  if (n > fOnes.size()) {
90  fOnes.reserve(n);
91  size_t ifirst = fOnes.size();
92  for (size_t i = ifirst; i < n; i++) {
93  fOnes.push_back(1.0);
94  }
95  }
96 }
97 
98 // Explicit instantiations.
99 template class TCpuMatrix<Float_t>;
100 template class TCpuMatrix<Double_t>;
101 
102 } // namespace DNN
103 } // namespace TMVA