37 auto g = std::mt19937();
41 std::random_device rd;
45 auto distUniform = std::uniform_real_distribution<>(0.0, 1.0);
46 auto distGauss = std::normal_distribution<>(0.0, 1.0);
50 for (
int i=0;
i<N; ++
i)
75 for (
int i=0;
i<N; ++
i)
106 for (
int ii=0; ii<actualN; ii++)
108 for (
int jj=0; jj<actualN; jj++)
113 double x = 1 - 2 * distUniform(
g);
114 double y = 1 - 2 * distUniform(
g);
121 double z=10*sin(
PI * x) * tanh(3 * y);
133 std::vector<Matrix1D<double> > centers;
135 const int Nclusters=5;
136 for (
int i=0;
i<Nclusters;
i++)
140 centers.push_back(center);
145 double minDistance=1e38;
146 for (
int i=0;
i<Nclusters-1; ++
i)
147 for (
int j=
i+1;
j<Nclusters; ++
j)
149 diff=centers[
i]-centers[
j];
151 minDistance=
std::min(minDistance,distance);
156 double sigma=minDistance/
sqrt(12);
157 for (
int n=0;
n<N; ++
n)
159 int i=(Nclusters*
n)/N;
161 MAT_ELEM(
X,
n,0)=
XX(center)+(distUniform(
g)-0.5)*sigma+noise*distGauss(
g);
162 MAT_ELEM(
X,
n,1)=
YY(center)+(distUniform(
g)-0.5)*sigma+noise*distGauss(
g);
163 MAT_ELEM(
X,
n,2)=
ZZ(center)+(distUniform(
g)-0.5)*sigma+noise*distGauss(
g);
170 for (
int i=0;
i<N; ++
i)
201 for (
int k=K-1;
k>=0; --
k)
208 for (
int kp=K-1; kp>kInsert; --kp)
224 for (
size_t i1=0; i1<
MAT_YSIZE(X)-1; ++i1)
225 for (
size_t i2=i1+1; i2<
MAT_YSIZE(X); ++i2)
251 for (
size_t i1=0; i1<
VEC_XSIZE(ind1); ++i1)
263 d=(*f)(
X,ind1(i1),ind2(i1));
277 for (
size_t i1=0; i1<
MAT_YSIZE(X)-1; ++i1)
278 for (
size_t i2=i1+1; i2<
MAT_YSIZE(X); ++i2)
312 double maxDistance=1.0;
315 double K=-0.5/(sigma*sigma*maxDistance);
356 std::cerr <<
"Estimating dimensionality ... " << std::endl;
368 double d=(
k-1)/(S-dist*(
k+1));
375 return -dsum/((k2-k1)*
MAT_YSIZE(distance));
397 double countLessMedianK=0, countLessMaxK=0;
398 std::cerr <<
"Estimating dimensionality ... " << std::endl;
400 for (
size_t i1=0; i1<
MAT_YSIZE(X)-1; ++i1)
402 for (
size_t i2=i1+1; i2<
MAT_YSIZE(X); ++i2)
427 double probLessMedianK=countLessMedianK*iCombinations;
428 double probLessMaxK=countLessMaxK*iCombinations;
429 return 2*
log(probLessMaxK/probLessMedianK)/
log(maxVal/median);
439 else if (method==
"CorrDim")
474 this->outputDim=outputDim;
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
void init_progress_bar(long total)
void min(Image< double > &op1, const Image< double > &op2)
void rowSum(Matrix1D< T > &sum) const
void normalizeColumns(Matrix2D< double > &A)
#define REPORT_ERROR(nerr, ErrormMsg)
void setInputData(Matrix2D< double > &X)
Set input data.
void sqrt(Image< double > &op)
Matrix1D< unsigned char > label
const Matrix2D< double > & getReducedData()
Get reduced data.
void generateNewDataset(const DatasetType &type, int N=1000, double noise=0.05)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void median(MultidimArray< T > &x, MultidimArray< T > &y, T &m)
void resizeNoCopy(int Ydim, int Xdim)
#define MAT_ELEM(m, i, j)
#define FOR_ALL_ELEMENTS_IN_MATRIX1D(v)
void log(Image< double > &op)
Incorrect argument received.
void progress_bar(long rlen)
quaternion_type< T > normalize(quaternion_type< T > q)
void sort(struct DCEL_T *dcel)
TYPE distance(struct Point_T *p, struct Point_T *q)
DimRedAlgorithm()
Empty constructor.
void resizeNoCopy(int Xdim)
void setOutputDimensionality(size_t outputDim)
Set output dimensionality.
#define MATRIX2D_ARRAY(m)