コード例 #1
0
ファイル: svt.hpp プロジェクト: bm424/pgure-svt
        // Reconstruct block in the image sequence after thresholding
        arma::cube Reconstruct(double lambda) {
            arma::cube v = arma::zeros<arma::cube>(Nx, Ny, T);
            arma::cube weights = arma::zeros<arma::cube>(Nx, Ny, T);

            arma::mat block, Ublock, Vblock;
            arma::vec Sblock;

            block.set_size(Bs*Bs, T);
            Ublock.set_size(Bs*Bs, T);
            Sblock.set_size(T);
            Vblock.set_size(T, T);

            #pragma omp parallel for shared(v, weights) \
                        private(block, Ublock, Sblock, Vblock)
            for (int it = 0; it < newVecSize; it++) {
                Ublock = U[it];
                Sblock = S[it];
                Vblock = V[it];

                // Basic singular value thresholding
                // arma::vec Snew = arma::sign(Sblock)
                //                      % arma::max(
                //                          arma::abs(Sblock) - lambda,
                //                          arma::zeros<arma::vec>(T));

                // Gaussian-weighted singular value thresholding
                arma::vec wvec = arma::abs(Sblock.max()
                                           * arma::exp(-1
                                                * lambda
                                                * arma::square(Sblock)/2));

                // Apply threshold
                arma::vec Snew = arma::sign(Sblock)
                                   % arma::max(
                                        arma::abs(Sblock) - wvec,
                                        arma::zeros<arma::vec>(T));

                // Reconstruct from SVD
                block = Ublock * diagmat(Snew) * Vblock.t();

                // Deal with block weights (TODO: currently all weights = 1)
                for (int k = 0; k < T; k++) {
                    int newy = patches(0, actualpatches(it), k);
                    int newx = patches(1, actualpatches(it), k);
                    v(arma::span(newy, newy+Bs-1),
                      arma::span(newx, newx+Bs-1),
                      arma::span(k, k)) += arma::reshape(block.col(k), Bs, Bs);
                    weights(arma::span(newy, newy+Bs-1),
                            arma::span(newx, newx+Bs-1),
                            arma::span(k, k)) += arma::ones<arma::mat>(Bs, Bs);
                }
            }

            // Include the weighting
            v /= weights;
            v.elem(find_nonfinite(v)).zeros();
            return v;
        }
コード例 #2
0
// [[Rcpp::export]]
arma::mat BeQTL2(const arma::mat & A, const arma::mat & B, const arma::umat & Bootmat){
  int bsi= Bootmat.n_rows;
  arma::mat C(A.n_cols*B.n_cols,Bootmat.n_rows);
  arma::mat tC(A.n_rows,B.n_rows);
  for(int i=0; i<bsi; i++){
    tC = cor(A.rows(Bootmat.row(i)),B.rows(Bootmat.row(i)));
    C.col(i) = vectorise(tC,0);
  }
  C.elem(find_nonfinite(C)).zeros();

  return reshape(median(C,1),A.n_cols,B.n_cols);
}
コード例 #3
0
ファイル: fn_find.hpp プロジェクト: Gyebro/clion-projects
inline
uvec
find_nonfinite(const BaseCube<typename T1::elem_type,T1>& X)
  {
  arma_extra_debug_sigprint();
  
  typedef typename T1::elem_type eT;
  
  const unwrap_cube<T1> tmp(X.get_ref());
  
  const Mat<eT> R( const_cast< eT* >(tmp.M.memptr()), tmp.M.n_elem, 1, false );
  
  return find_nonfinite(R);
  }
コード例 #4
0
//Script that takes two matrices, performs bootstrapped correlation, and returns the median
// [[Rcpp::export]]
arma::mat BeQTL(const arma::mat & A, const arma::mat & B, const arma::umat & Bootmat){
  int bsi= Bootmat.n_rows;
  Rcpp::Rcout<<"Starting Bootstrap!"<<std::endl;
  arma::mat C(A.n_cols*B.n_cols,Bootmat.n_rows);
  arma::mat tA(A.n_rows,A.n_cols);
  arma::mat tB(B.n_rows,B.n_cols);
  arma::mat tC(A.n_rows,B.n_rows);
  for(int i=0; i<bsi; i++){
    tA = A.rows(Bootmat.row(i));
    tB = B.rows(Bootmat.row(i));
    tC = cor(tA,tB);
    C.col(i) = vectorise(tC,0);
  }
  C.elem(find_nonfinite(C)).zeros();

 return reshape(median(C,1),A.n_cols,B.n_cols);
}
コード例 #5
0
//Function to perform point estimate of correlation
// [[Rcpp::export]]
arma::mat PointCor(const arma::mat & A, const arma::mat & B){
  arma::mat C= cor(A,B);
  C.elem(find_nonfinite(C)).zeros();
  return C;
}