47 std::list< Point3d >::const_iterator iter( selectedPoints.begin() ), last( selectedPoints.end() ) ;
50 for(
int t = 0 ; t < data.
dimT() ; ++t )
51 individuals( i, t ) = data( (*iter)[0], (*iter)[1], (*iter)[2], t ) ;
64 int nbFrame = individuals.
dimY() ;
68 _mean = std::vector<float>(individuals.
dimY(), 0.) ;
69 _var = std::vector<float>(individuals.
dimY(), 0.) ;
71 for(
int ind = 0 ; ind < individuals.
dimX() ; ++ind )
72 for(
int t = 0 ; t < individuals.
dimY() ; ++t ){
73 val = individuals( ind, t ) ;
75 _var[t] += val * val ;
80 for(
int t = 0 ; t < nbFrame ; ++t ){
81 _mean[t] /= centeredIndivMatrix.dimX() ;
83 for(
int ind = 0 ; ind < centeredIndivMatrix.dimX() ; ++ind ){
84 centeredIndivMatrix( ind, t ) = individuals( ind, t ) ;
86 centeredIndivMatrix( ind, t ) -=
_mean[t] ;
90 centeredIndivMatrix( ind, t ) /=
_var[t] ;
103 for(
int k=0; k < centeredIndivMatrix.dimX() ;++k)
104 matVarCov(x1, y1) += centeredIndivMatrix(k, x1) * centeredIndivMatrix(k, y1);
105 matVarCov(x1, y1) /= centeredIndivMatrix.dimX() - 1 ;
107 std::cerr <<
"var cov filled" << std::endl ;
118 std::cerr <<
"doing svd !" << std::endl ;
120 std::cerr <<
"svd done !" << std::endl ;
125 svd.
sort(matVarCov, eigenVal) ;
136 for(
int t = 0 ; t < matVarCov.dimX() ; ++t ){
142 catch( std::exception &e ){
144 if( individuals.
dimX() > 0 && individuals.
dimY() > 0 && individuals.
dimZ() > 0 ){
145 std::cerr <<
"invalid pca" << std::endl ;
156 std::cout <<
"empty indiv matrix" << std::endl ;
float max(float x, float y)
void sort(AimsData< T > &, AimsData< T > &, AimsData< T > *v=NULL)
sort the U and V matrices and the W vector in decreasing order
AimsData< T > doit(AimsData< T > &, AimsData< T > *v=NULL)
Singular Value Decomposition.
aims::AimsFastAllocationData< float > _eigenVectors
#define ForEach2d(thing, x, y)
std::vector< float > _eigenValues
void setReturnType(SVDReturnType rt)
std::vector< float > _var
void doIt(const AimsData< T > &individuals)
std::vector< float > _mean