35 sz1<1?(sz0<1?1:sz0):sz1) { setAll(); }
42 inline Array2DMatrix& operator =(
const Array2DMatrix& oth )
43 {
return a2d_ = oth.
a2d_; }
45 {
return a2d_ = a2d; }
47 {
return a2d_ = a2d; }
49 {
return isEq( oth.
a2d_, fT(1e-6)) ; }
50 inline bool isEq(
const Array2D<fT>&,fT eps=fT(1e-6))
const;
52 inline int size(
bool dim1=
false)
const;
53 inline void set(
int i0,
int i1, fT v ) { a2d_.set(i0,i1,v); }
54 inline fT&
get(
int i0,
int i1);
55 inline fT
get(
int i0,
int i1 )
const {
return a2d_.get(i0,i1); }
57 inline void setAll( fT v=fT(0) ) { a2d_.setAll( v ); }
58 inline void setDiagonal(fT);
62 inline void add(
const Array2DMatrix&);
63 inline void multiply(fT);
64 inline void multiply(
const Array2DMatrix&);
65 inline void transpose();
67 inline void getSum(
const Array2DMatrix&,Array2DMatrix&)
const;
69 inline void getProduct(
const Array2DMatrix&,Array2DMatrix&)
const;
70 inline void getTransposed(Array2DMatrix&);
71 inline bool getCholesky(Array2DMatrix&)
const;
79 #define mDefineA2DMatSizes(m,nm) \ 80 const int nm##0 = (m).size( false ); const int nm##1 = (m).size( true ) 86 return a2d_.info().getSize( dim1 ? 1 : 0 );
93 const od_int64 offset = a2d_.info().getOffset( i0, i1 );
94 return a2d_.getData()[offset];
98 #define mDefineImplA2DMatSizes mDefineA2DMatSizes(*this,sz) 105 if ( a2d_.info().getSize(0) != sz0 || a2d_.info().getSize(1) != sz1 )
108 for (
int idx0=0; idx0<sz0; idx0++ )
110 for (
int idx1=0; idx1<sz1; idx1++ )
112 if ( !
isFPEqual(
get(idx0,idx1), a2d.
get(idx0,idx1), eps ) )
124 const int sz = sz0 > sz1 ? sz1 : sz0;
126 for (
int idx=0; idx<sz; idx++ )
135 for (
int idx0=0; idx0<sz0; idx0++ )
136 for (
int idx1=0; idx1<sz1; idx1++ )
137 get( idx0, idx1 ) += val;
146 const int outsz0 = insz0 > sz0 ? sz0 : insz0;
147 const int outsz1 = insz1 > sz1 ? sz1 : insz1;
149 for (
int idx0=0; idx0<outsz0; idx0++ )
151 for (
int idx1=0; idx1<outsz1; idx1++ )
154 for (
int idx=0; idx<sz1; idx++ )
155 get( idx0, idx1 ) += in.
get( idx0, idx1 );
165 for (
int idx0=0; idx0<sz0; idx0++ )
166 for (
int idx1=0; idx1<sz1; idx1++ )
167 get( idx0, idx1 ) *= fac;
174 const Array2DMatrix
copy( *
this );
179 #define mA2DMatHandleDimErr(v1,v2) \ 182 BufferString emsg( "Dim error: " #v1 "=", v1, " " #v2 "=" ); \ 183 emsg.add( v2 ); pErrMsg( emsg ); \ 185 const_cast<int&>( v2 ) = v1; \ 187 const_cast<int&>( v1 ) = v2; \ 193 Array2DMatrix& out )
const 197 const int outsz0 = insz0 > sz0 ? sz0 : insz0;
198 const int outsz1 = insz1 > sz1 ? sz1 : insz1;
201 for (
int idx0=0; idx0<outsz0; idx0++ )
203 for (
int idx1=0; idx1<outsz1; idx1++ )
206 for (
int idx=0; idx<sz1; idx++ )
207 out.
set( idx0, idx1,
get(idx0,idx1) + in.
get(idx0,idx1) );
222 for (
int idx0=0; idx0<sz0; idx0++ )
225 for (
int idx1=0; idx1<sz1; idx1++ )
226 res +=
get( idx0, idx1 ) * vin.
get( idx1 );
227 vout.
set( idx0, res );
234 Array2DMatrix& out )
const 241 for (
int idx0=0; idx0<sz0; idx0++ )
243 for (
int idx1=0; idx1<insz1; idx1++ )
246 for (
int idx=0; idx<sz1; idx++ )
247 res += in.
get( idx, idx1 ) *
get( idx0, idx );
248 out.
set( idx0, idx1, res );
257 const Array2DMatrix
copy( *
this );
268 for (
int idx0=0; idx0<sz0; idx0++ )
270 for (
int idx1=0; idx1<sz1; idx1++ )
271 out.
set( idx1, idx0,
get( idx0, idx1 ) );
285 for(
int idx0=0; idx0<sz0; idx0++ )
287 for (
int idx1=0; idx1<=idx0; idx1++ )
290 for (
int j=0; j<idx1; j++ )
291 sum += out.
get( idx0, j ) * out.
get( idx1, j );
296 val =
get( idx0, idx0 ) - sum;
303 const fT dividend =
get( idx0, idx1 ) - sum;
304 const fT divideby = out.
get( idx1, idx1 );
306 val = dividend / divideby;
310 out.
set( idx0, idx1, val );
Array2DMatrix(const Array2D< fT > &a2d)
Definition: array2dmatrix.h:40
Array1DImpl< float > Array1DVector
Definition: array2dmatrix.h:19
Array2DMatrix(const Array2DMatrix &oth)
Definition: array2dmatrix.h:36
void getTransposed(Array2DMatrix &)
Definition: array2dmatrix.h:263
void multiply(fT)
Definition: array2dmatrix.h:162
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
virtual T get(int p0, int p1) const =0
void add(fT)
Definition: array2dmatrix.h:132
#define mDefineA2DMatSizes(m, nm)
easily define the matrix dimension sizes
Definition: array2dmatrix.h:79
#define od_int64
Definition: plftypes.h:34
void getProduct(const Array1DVector &, Array1DVector &) const
Definition: array2dmatrix.h:214
bool isEq(const Array2D< fT > &, fT eps=fT(1e-6)) const
Definition: array2dmatrix.h:102
fT & get(int i0, int i1)
Definition: array2dmatrix.h:91
Matrix class based on Array2D. Initialized to 0.
Definition: array2dmatrix.h:30
void set(int pos, T)
Definition: arrayndimpl.h:359
#define mA2DMatHandleDimErr(v1, v2)
Definition: array2dmatrix.h:179
void set(int i0, int i1, fT v)
Definition: array2dmatrix.h:53
virtual int getSize(int dim) const =0
bool isFPEqual(T1 v1, T2 v2, eT eps)
Definition: commondefs.h:40
RetType getSum(const ArrayND< ArrType > &in, bool noudf, bool parallel)
returns the sum of all defined values in the Array. Returns UDF if empty or only udfs encountered...
Definition: arrayndalgo.h:391
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:127
bool setSize(int)
Definition: arrayndimpl.h:400
Array2DImpl< fT > a2d_
Definition: array2dmatrix.h:73
void setDiagonal(fT)
Definition: array2dmatrix.h:121
void setAll(fT v=fT(0))
Definition: array2dmatrix.h:57
void getSum(const Array2DMatrix &, Array2DMatrix &) const
Definition: array2dmatrix.h:192
void getProduct(const ArrayND< ArrType > &in1, const ArrayND< ArrType > &in2, ArrayND< ArrType > &out, bool noudf, bool parallel)
computes the product array between two arrays
Definition: arrayndalgo.h:466
#define mDefineImplA2DMatSizes
Definition: array2dmatrix.h:98
Array2DMatrix(int sz0=1, int sz1=0)
Definition: array2dmatrix.h:33
bool setSize(int, int)
Definition: arrayndimpl.h:515
void setToIdentity()
Definition: array2dmatrix.h:59
int size(bool dim1=false) const
Definition: array2dmatrix.h:84
Array2DMatrix(const Array2DImpl< fT > &a2d)
Definition: array2dmatrix.h:38
void copy(TypeSetBase< T, I > &to, const TypeSetBase< S, I > &from)
Definition: typeset.h:221
#define mClass(module)
Definition: commondefs.h:161
bool getCholesky(Array2DMatrix &) const
Definition: array2dmatrix.h:277
const Array1DInfo & info() const
Definition: arrayndimpl.h:75
void transpose()
Definition: array2dmatrix.h:255
T get(int pos) const
Definition: arrayndimpl.h:371