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)); }
void YAPCAReduce<eltype>::forward_map(const ya_type1 &input, ya_type2 &output) const { YA_DEBUG_ERROR(input.cols()==this->high_dim(), "Dimensions in input matrix do not match map"); YA_DEBUG_ERROR(eigen_vectors.rows()==this->high_dim() && eigen_vectors.cols()==this->low_dim(), "Map does not match high and low dimensionalities"); output=YA_MatT(input-rowrep(column_means,input.rows()))*eigen_vectors; }
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); }