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

#include <diffusionMaps.h>

Inheritance diagram for DiffusionMaps:
Inheritance graph
[legend]
Collaboration diagram for DiffusionMaps:
Collaboration graph
[legend]

Public Member Functions

void setSpecificParameters (double t=1.0, double sigma=1.0)
 Set specific parameters. More...
 
void reduceDimensionality ()
 Reduce dimensionality. More...
 
- Public Member Functions inherited from DimRedAlgorithm
 DimRedAlgorithm ()
 Empty constructor. More...
 
void setInputData (Matrix2D< double > &X)
 Set input data. More...
 
void setOutputDimensionality (size_t outputDim)
 Set output dimensionality. More...
 
const Matrix2D< double > & getReducedData ()
 Get reduced data. More...
 

Public Attributes

double t
 
double sigma
 
- Public Attributes inherited from DimRedAlgorithm
Matrix2D< double > * X
 Pointer to input data. More...
 
size_t outputDim
 Output dim. More...
 
Matrix2D< double > Y
 Output data. More...
 
DimRedDistance2 distance
 Distance function. More...
 
FileName fnMapping
 Save mapping. More...
 

Detailed Description

Class for making a Diffusion Maps dimensionality reduction

Definition at line 37 of file diffusionMaps.h.

Member Function Documentation

◆ reduceDimensionality()

void DiffusionMaps::reduceDimensionality ( )
virtual

Reduce dimensionality.

Implements DimRedAlgorithm.

Definition at line 35 of file diffusionMaps.cpp.

36 {
37  //Normalize data (between 0 and 1)
39 
40  // Compute Gaussian Kernel Matrix.
41  // First, compute the distance of all vs all.
42  Matrix2D<double> L2distance;
43  computeDistance(*X,L2distance,distance,false);
44 
45  // Now use this distance to build a similarity matrix
46  computeSimilarityMatrix(L2distance,sigma);
47 
48  // Normalize L2distance to be a stochastic matrix
50  L2distance.rowSum(p);
51  if (t!=1.)
53  MAT_ELEM(L2distance,i,j)/=pow(VEC_ELEM(p,i)*VEC_ELEM(p,j),t);
54  else
56  MAT_ELEM(L2distance,i,j)/=VEC_ELEM(p,i);
57 
58  // Normalize L2distance again
59  L2distance.rowSum(p);
61  VEC_ELEM(p,i)=sqrt(VEC_ELEM(p,i));
63  MAT_ELEM(L2distance,i,j)/=VEC_ELEM(p,i)*VEC_ELEM(p,j);
64 
65  // L2distance=U*S*V^t
66  Matrix2D<double> U,V;
68  svdcmp(L2distance,U,S,V);
69 
70  // Get columns 1 to outputDim of U as output
71  // normalzied by the first element in its row
73  for (size_t i=0;i<MAT_YSIZE(U);++i)
74  {
75  double iK=1/MAT_ELEM(U,i,0);
76  for (size_t j=1;j<=outputDim;++j)
77  MAT_ELEM(Y,i,j-1)=MAT_ELEM(U,i,j)*iK;
78  }
79 }
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
Definition: matrix2d.h:104
#define MAT_YSIZE(m)
Definition: matrix2d.h:124
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
void rowSum(Matrix1D< T > &sum) const
Definition: matrix2d.cpp:779
void computeSimilarityMatrix(Matrix2D< double > &D2, double sigma, bool skipZeros, bool normalize)
Matrix2D< double > Y
Output data.
Definition: dimred_tools.h:147
void computeDistance(const Matrix2D< double > &X, Matrix2D< double > &distance, DimRedDistance2 f, bool computeSqrt)
void sqrt(Image< double > &op)
Matrix2D< double > * X
Pointer to input data.
Definition: dimred_tools.h:141
#define i
void resizeNoCopy(int Ydim, int Xdim)
Definition: matrix2d.h:534
size_t outputDim
Output dim.
Definition: dimred_tools.h:144
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
#define FOR_ALL_ELEMENTS_IN_MATRIX1D(v)
Definition: matrix1d.h:72
void normalizeColumnsBetween0and1(Matrix2D< double > &A)
Definition: matrix2d.cpp:221
void svdcmp(const Matrix2D< T > &a, Matrix2D< double > &u, Matrix1D< double > &w, Matrix2D< double > &v)
Definition: matrix2d.cpp:125
#define j
DimRedDistance2 distance
Distance function.
Definition: dimred_tools.h:150

◆ setSpecificParameters()

void DiffusionMaps::setSpecificParameters ( double  t = 1.0,
double  sigma = 1.0 
)

Set specific parameters.

Definition at line 29 of file diffusionMaps.cpp.

30 {
31  this->t=t;
32  this->sigma=sigma;
33 }

Member Data Documentation

◆ sigma

double DiffusionMaps::sigma

Definition at line 41 of file diffusionMaps.h.

◆ t

double DiffusionMaps::t

Definition at line 40 of file diffusionMaps.h.


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