34 using std::accumulate;
35 using std::inner_product;
55 template <
int o>
struct Pow
63 template<>
struct Pow<1>
70 template<>
struct Pow<0>
80 template <
int s,
bool abs=false,
class T=TData>
class Power
94 return orig+
Abs(
mP(num));
103 :
public Power<1,abs,T>{};
106 :
public Power<2,abs,T>{};
108 template<
bool abs=false,
class T=TData>
class CubeTmpl
109 :
public Power<3,abs,T>{};
128 return orig+
mP(num)*
i++;
132 return orig+
Abs(
mP(num))*
i++;
170 template <
int s=1,
bool abs=false,
class T=TData,
class U=TData>
class BiasedPower
258 return orig+log(
Abs(num));
304 return accumulate(a.
GetPtr(),a.
GetPtr()+a.
Size(),T(1.0),std::multiplies<T>());
375 template<
int o,
bool abs=false,
class T=TData,
class U=TData>
class Moment:
public BaseMemOp
382 return static_cast<U>(powSum(a))/a.
Size();
416 U normFactor = PowSum( a );
420 if ( normFactor < 1e-7 )
423 return static_cast<U>(wPowSum(a))/normFactor;
457 return static_cast<U>(cwPowSum(a1,a2))/powSum(a1);
488 template<
bool abs=false,
class T=TData,
class U=TData>
class MeanTmpl:
public Moment<1,abs,T,U>{};
549 return memory=(*this)(a, inProd, (
StaticFalse*)(0));
615 return static_cast<U>(bps(a))/a.
Size();
635 CLAM_DEBUG_ASSERT(moments.
Size()>=o,
"Central Moment: you need as many raw moments as the order of the central moment you want to compute");
636 return (*
this)(a,moments,(
O<o>*)(0));
649 return (-1)*m1*m1 + m2;
659 return m1*(2*m1*m1 - 3*m2) + m3;
670 return m1*(m1*((-3)*m1*m1 + 6*m2) - 4*m3) + m4;
683 return m1*(m1*(m1*(4*m1*m1 - 10*m2) + 10*m3) - 5*m4) + m5;
701 if(!useMemory)
return CLAM_sqrt(centralMoment2(a));
705 return memory=(*this)(a,centralMoment2,
false);
710 return (*
this)(a,
mCM2,useMemory);
738 return memory=(*this)(data, std, ctrMnt3,
false);
744 return (*
this)(data,
mSD,
mCM3, useMemory);
752 U tmpCentralMoment3 = ctrMnt3(data);
753 return tmpCentralMoment3/(tmpStd*tmpStd*tmpStd);
775 return memory=(*this)(a,var,ctrMnt4,
false);
780 return (*
this)(a,
mCM2,
mCM4,useMemory);
787 if (variance<
U(1e-10))
return U(3.0);
788 U centerMoment4 = ctrMnt4(a);
789 return centerMoment4/(variance*variance);