42 std::vector<unsigned>
dummy;
43 for (
unsigned i = 0;
i < ts.
size();
i++)
55 std::vector<FeatureVector>
a;
67 for (
int k = 0;
k <
n;
k++)
72 for (std::vector<unsigned>::const_iterator
i = idx.begin();
i != idx.end();
i++)
80 mean.push_back(sum / l);
89 for (
int i = 0;
i <
n;
i++)
91 for (
int j = 0;
j <=
i;
j++)
95 for (std::vector<unsigned>::const_iterator it = idx.begin();it != idx.end();it++)
99 if (finite(d1) && finite(d2))
106 a[
i][
j] = a[
j][
i] = sum / l;
108 a[
i][
j] = a[
j][
i] = 0;
129 std::vector<FeatureVector> &v =
eigenvec;
131 for (
int i = 0;
i <
n;
i++)
135 b[
i] = d[
i] = a[
i][
i];
146 for (
int it = 1;it <= 50;it++)
148 if ((verbosity == 1) && (it == 1))
153 for (
int ip = 0; ip < n - 1; ip++)
155 for (
int iq = ip + 1; iq <
n; iq++)
156 sm += fabs(a[iq][ip]);
160 for (
int i = 0;
i < n - 1;
i++)
165 for (
int j =
i + 1;
j <
n;
j++)
184 tresh = 0.2 * sm / (n *
n);
188 for (
int ip = 0; ip < n - 1; ip++)
190 for (
int iq = ip + 1; iq <
n; iq++)
195 && fabs(d[ip]) + g == fabs(d[ip])
196 && fabs(d[iq]) + g == fabs(d[iq]))
198 else if (fabs(a[iq][ip]) > tresh)
205 if (fabs(h) + g == fabs(h))
210 t = 1.0 / (fabs(theta) +
sqrt(1.0 + theta * theta));
214 c = 1.0 /
sqrt(1 + t * t);
224 #define rotate(a,i,j,k,l) \ 227 a[i][j] = g - s *(h + g*tau); \ 228 a[k][l] = h + s*(g - h*tau); 231 for (j = 0; j < ip; j++)
235 for (j = ip + 1; j < iq; j++)
239 for (j = iq + 1; j <
n; j++)
243 for (j = 0; j <
n; j++)
252 for (
int ip = 0; ip <
n; ip++)
271 #ifdef UNUSED // detected as unused 29.6.2018 273 void PCAAnalyzer::prepare_for_correlation()
307 void PCAAnalyzer::setIdentity(
int n)
314 for (
int i = 0;
i <
n;
i++)
323 int PCAAnalyzer::Dimension_for_variance(
double th_var)
328 for (
int i = 0;
i < imax;
i++)
331 double explained = 0;
337 while (explained / sum < th_var);
344 if (input.size() !=
eigenvec[0].size())
347 int size = input.size();
349 for (
int i = 0;
i <
D;
i++)
353 for (
int j = 0;
j < size;
j++)
371 out <<
"Relevant Dimension: " << PC.
get_Dimension() << std::endl;
372 out <<
"Mean vector: ";
373 int size = PC.
mean.size();
374 out <<
"(" << size <<
") ---> ";
375 for (
int j = 0;
j < size;
j++)
376 out << PC.
mean[
j] <<
" ";
380 out << PC.
eigenval[
i] <<
" (" << size <<
") ---> ";
381 for (
int j = 0;
j < size;
j++)
392 std::string read_line;
393 getline(in, read_line);
394 sscanf(read_line.c_str(),
"Relevant Dimension: %d", &
D);
400 getline(in, read_line);
401 sscanf(read_line.c_str(),
"Mean vector: (%d) --->", &size);
402 read_line.erase(0, read_line.find(
'>') + 1);
403 PC.
mean.resize(size);
404 std::istringstream istr1(read_line.c_str());
405 for (
int j = 0;
j < size;
j++)
410 getline(in, read_line);
412 sscanf(read_line.c_str(),
"%f (%d) ---> ", &
f, &size);
414 read_line.erase(0, read_line.find(
'>') + 1);
416 std::istringstream istr2(read_line.c_str());
417 for (
int j = 0;
j < size;
j++)
425 #ifdef UNUSED // detected as unused 29.6.2018 427 int PCA_set::create_empty_PCA(
int n)
429 int retval =
PCA.size();
430 PCA.resize(retval + n);
431 for (
int i = 0;
i <
n;
i++)
440 int imax = PS.
PCA.size();
441 out <<
"Number of PCAs: " << imax << std::endl;
442 for (
int i = 0;
i < imax;
i++)
450 std::string read_line;
451 getline(in, read_line);
452 sscanf(read_line.c_str(),
"Number of PCAs: %d\n", &imax);
454 for (
int i = 0;
i < imax;
i++)
467 sum_all_samples.initZeros(
d);
468 current_sample_mean.initZeros(
d);
469 sum_proj.initZeros(
d);
470 sum_proj2.initZeros(
d);
471 eigenvectors.initZeros(
d, J);
474 #ifdef UNUSED // detected as unused 29.6.2018 481 sum_all_samples += sample;
482 current_sample_mean = sum_all_samples /
n;
487 for (
int j = 0;
j < J;
j++)
496 eigenvectors.setCol(
j, un);
503 un -= current_sample_mean;
508 for (
int i = 0;
i <
d;
i++)
509 scale += un(
i) * eigenvectors(
i,
j);
513 double w1 = (double)(
n - 1.0) /
n;
514 double w2 = (1.0 - w1) * scale;
515 for (
int i = 0;
i <
d;
i++)
518 w1 * eigenvectors(
i,
j) +
520 norm2 += eigenvectors(
i,
j) *
528 for (
int i = 0;
i <
d;
i++)
529 eigenvectors(
i,
j) /=
norm;
534 for (
int i = 0;
i <
d;
i++)
535 project += un(
i) * eigenvectors(
i,
j);
536 for (
int i = 0;
i <
d;
i++)
537 un(
i) -= project * eigenvectors(
i,
j);
540 sum_proj(
j) += project;
541 sum_proj2(
j) += project * project;
552 for (
int j = 0;
j < J;
j++)
553 for (
int i = 0;
i <
d;
i++)
554 output(
j) += (input(
i) - current_sample_mean(
i)) * eigenvectors(
i,
j);
void set_Dimension(int _D)
#define REPORT_ERROR(nerr, ErrormMsg)
void sqrt(Image< double > &op)
virtual void OnReportOperation(const std::string &_rsOp)=0
virtual void OnInitOperation(unsigned long _est_it)=0
virtual const unsigned & getVerbosity() const
std::vector< double > avg_ei
T norm(const std::vector< T > &v)
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
#define rotate(a, i, j, k, l)
void project(const Matrix1D< double > &input, Matrix1D< double > &output) const
Running_PCA(int _J, int _d)
unsigned dimension() const
#define XMIPP_EQUAL_ACCURACY
std::vector< PCAAnalyzer > PCA
Error related to numerical calculation.
bool row
<0=column vector (default), 1=row vector
virtual void OnProgress(unsigned long _it)=0
std::vector< double > prod_ei_mean
void reset(ClassicTrainingVectors const &ts)
basic_istream< char, std::char_traits< char > > istream
friend std::ostream & operator<<(std::ostream &out, const PCAAnalyzer &PC)
int get_Dimension() const
Incorrect MultidimArray dimensions.
std::vector< double > prod_ei_ei
friend std::istream & operator>>(std::istream &in, PCAAnalyzer &PC)
std::vector< floatFeature > FeatureVector
const Item & itemAt(unsigned _i) const
std::vector< FeatureVector > eigenvec