Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
PCAonline Class Reference

#include <basic_pca.h>

Collaboration diagram for PCAonline:
Collaboration graph
[legend]

Public Member Functions

 PCAonline ()
 Empty constructor. More...
 
void addVector (MultidimArray< double > &y)
 
MultidimArray< double > & getCurrentPCA ()
 Get principal component. More...
 
double getCurrentProjection ()
 Get current projection. More...
 

Public Attributes

MultidimArray< double > ysum
 
MultidimArray< double > yxt
 
MultidimArray< double > c1
 
MultidimArray< double > ycentered
 
double zn
 
double xxt
 
int N
 
double maxzn
 

Detailed Description

Online PCA

Definition at line 159 of file basic_pca.h.

Constructor & Destructor Documentation

◆ PCAonline()

PCAonline::PCAonline ( )

Empty constructor.

Definition at line 519 of file basic_pca.cpp.

520 {
521  N=0;
522 }

Member Function Documentation

◆ addVector()

void PCAonline::addVector ( MultidimArray< double > &  y)

Add new vector. The input vector is centered according to the current average.

Definition at line 525 of file basic_pca.cpp.

526 {
527  if (N==0)
528  {
529  ysum=y;
530  yxt.resizeNoCopy(y);
531  c1.resizeNoCopy(y);
533  N=1;
534  zn=0;
535  }
536  else if (N==1)
537  {
538  xxt=0;
540  {
541  double yval=DIRECT_MULTIDIM_ELEM(y,n);
544  }
545  c1/=sqrt(xxt); // Normalize c1
546  zn=1;
547  N=2;
548  }
549  else
550  {
551  double iN=1.0/N;
552  zn=0;
554  {
556  zn+=DIRECT_MULTIDIM_ELEM(c1,n)*DIRECT_MULTIDIM_ELEM(ycentered,n); // zn = ycentered^T c1
557  }
558  if (fabs(zn)>maxzn)
559  return;
560 
561  xxt+=zn*zn;
562  double ixxt=1.0/xxt;
563  double c1norm=0;
565  {
567  DIRECT_MULTIDIM_ELEM(yxt,n)+=zn*DIRECT_MULTIDIM_ELEM(ycentered,n); // yxt+=zn*ycentered
568  DIRECT_MULTIDIM_ELEM(c1,n)=ixxt*DIRECT_MULTIDIM_ELEM(yxt,n); // c1=yxt/xxt
570  }
571  c1/=sqrt(c1norm);
572  N++;
573  }
574 }
void resizeNoCopy(const MultidimArray< T1 > &v)
void sqrt(Image< double > &op)
static double * y
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
double maxzn
Definition: basic_pca.h:168
#define DIRECT_MULTIDIM_ELEM(v, n)
MultidimArray< double > ycentered
Definition: basic_pca.h:164
double xxt
Definition: basic_pca.h:166
MultidimArray< double > ysum
Definition: basic_pca.h:161
int * n
MultidimArray< double > yxt
Definition: basic_pca.h:162
MultidimArray< double > c1
Definition: basic_pca.h:163
double zn
Definition: basic_pca.h:165

◆ getCurrentPCA()

MultidimArray<double>& PCAonline::getCurrentPCA ( )
inline

Get principal component.

Definition at line 179 of file basic_pca.h.

179  {
180  return c1;
181  }
MultidimArray< double > c1
Definition: basic_pca.h:163

◆ getCurrentProjection()

double PCAonline::getCurrentProjection ( )
inline

Get current projection.

Definition at line 184 of file basic_pca.h.

184  {
185  return zn;
186  }
double zn
Definition: basic_pca.h:165

Member Data Documentation

◆ c1

MultidimArray<double> PCAonline::c1

Definition at line 163 of file basic_pca.h.

◆ maxzn

double PCAonline::maxzn

Definition at line 168 of file basic_pca.h.

◆ N

int PCAonline::N

Definition at line 167 of file basic_pca.h.

◆ xxt

double PCAonline::xxt

Definition at line 166 of file basic_pca.h.

◆ ycentered

MultidimArray<double> PCAonline::ycentered

Definition at line 164 of file basic_pca.h.

◆ ysum

MultidimArray<double> PCAonline::ysum

Definition at line 161 of file basic_pca.h.

◆ yxt

MultidimArray<double> PCAonline::yxt

Definition at line 162 of file basic_pca.h.

◆ zn

double PCAonline::zn

Definition at line 165 of file basic_pca.h.


The documentation for this class was generated from the following files: