예제 #1
0
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);
}
예제 #2
0
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));       
}
예제 #3
0
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;
}
예제 #4
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));    
}
예제 #5
0
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);
}