void point_pca_ep(const YA_BaseT &input, const eltype epsilon, const ya_type2 &dims, EigenOptions &eigopts, YA_RowD &vmean, YA_RowD &vmin, YA_RowD &vmax, YA_RowD &vstd, const int verbose) { YA_DEBUG_ERROR(epsilon>0, "Epsilon must be greater than 0 for point_pca"); int me, num_procs; ya_mpi_info(me,num_procs); YA_ColI counts, starts; ya_mpi_counts(input.rows(),num_procs,counts,starts); eigopts.dim(input.cols()); YA_MatT output; _point_pca_ep(input,epsilon,eigopts,output,true,verbose,me,num_procs, counts,starts); if (input.cols()!=dims.numel() && counts[me]>0) output=YA_MatT(output(":",dims-1)); #ifdef YA_MPI if (num_procs>1) mpi_vstat(output,dims.numel(),vmin,vmax,vmean,vstd); else #endif vstat(output,vmin,vmax,vmean,vstd); }
void point_pca_ep(const YA_BaseT &input, const eltype epsilon, const ya_type2 &dims, EigenOptions &eigopts, ya_type3 &output, const int verbose_out) { YA_DEBUG_ERROR(epsilon>0, "Epsilon must be greater than 0 for point_pca"); int me, num_procs; ya_mpi_info(me,num_procs); YA_ColI counts, starts; ya_mpi_counts(input.rows(),num_procs,counts,starts); eigopts.dim(input.cols()); _point_pca_ep(input,epsilon,eigopts,output,true,verbose_out,me,num_procs, counts,starts); if (num_procs>1) { YA_MatRMT piece_t; #ifdef YA_MPI if (counts[me]>0) piece_t=output(":",dims-1); ya_mpi_concat_rows(piece_t,output,dims.numel(),me,num_procs,counts,starts); #endif } else if (input.cols()!=dims.numel()) output=YA_MatT(output(":",dims-1)); }
int YAPCAReduce<eltype>::find_map(const ya_type1 &input, ya_type2 &output, ya_sizet dim, EigenOptions &eigopts) { // Target dimensionality YA_DEBUG_ERROR(dim<=input.cols(), "Not enough dimensions in input matrix"); eigopts.dim(dim); this->_high_dim=input.cols(); this->_low_dim=dim; // Column center the matrix column_means=sum(input)/static_cast<eltype>(input.rows()); YA_MatT input_cen(input.rows(),input.cols()); ya_sizet iC=input.cols(); for (ya_sizet i=0; i<iC; i++) input_cen(":",i)=input(":",i)-column_means(i); // Calculate covarience matrix #ifdef YA_PROGMETER YA_TimeKeeper tk; YA_ProgMeter pm; if (this->_verbose) { pm.start("Computing Forward and Reverse Maps:", 70, 0, false); tk.start(); } #endif VM_SymMat covmat=input_cen.T()*input_cen; eigs(covmat,eigen_vectors,this->eigen_values,eigopts); #ifdef YA_PROGMETER if (this->_verbose) { pm.finish(); tk.end(); cerr << "Done. " << tk << ".\n"; } #endif // Calculate the reduced output output=input_cen*eigen_vectors; return 0; }
void point_pca(const YA_BaseT &input, const ya_sizet k, const ya_type2 &dims, EigenOptions &eigopts, ya_type3 &output,const int verbose_out) { int me, num_procs; ya_mpi_info(me,num_procs); eigopts.dim(input.cols()); YA_ColI counts, starts; ya_mpi_counts(input.rows(),num_procs,counts,starts); _point_pca(input,k,eigopts,output,true,verbose_out,me,num_procs,counts, starts); if (num_procs>1) { YA_MatRMT piece_t; #ifdef YA_MPI if (counts[me]>0) piece_t=output(":",dims-1); ya_mpi_concat_rows(piece_t,output,dims.numel(),me,num_procs,counts,starts); #endif } else if (input.cols()!=dims.numel()) output=YA_MatT(output(":",dims-1)); }
void point_pca(const YA_BaseT &input, const ya_sizet k, const ya_type2 &dims, EigenOptions &eigopts, YA_RowD &vmean, YA_RowD &vmin, YA_RowD &vmax, YA_RowD &vstd, const int verbose) { int me, num_procs; ya_mpi_info(me,num_procs); eigopts.dim(input.cols()); YA_ColI counts, starts; ya_mpi_counts(input.rows(),num_procs,counts,starts); YA_MatT output; _point_pca(input,k,eigopts,output,true,verbose,me,num_procs,counts,starts); if (input.cols()!=dims.numel() && counts[me]>0) output=YA_MatT(output(":",dims-1)); #ifdef YA_MPI if (num_procs>1) mpi_vstat(output,dims.numel(),vmin,vmax,vmean,vstd); else #endif vstat(output,vmin,vmax,vmean,vstd); }