Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Rcpp.h>
- // [[Rcpp::depends(RcppParallel)]]
- #include <RcppParallel.h>
- struct EuclidianDistanceCalculator: RcppParallel::Worker{
- const RcppParallel::RMatrix<double> inputMatrix;
- RcppParallel::RVector<double> result;
- const RcppParallel::RVector<int> oldColumns;
- EuclidianDistanceCalculator(const Rcpp::NumericMatrix& inputMatrix,
- Rcpp::NumericVector& result, const Rcpp::LogicalVector& oldColumns)
- : inputMatrix(inputMatrix), result(result), oldColumns(oldColumns){
- }
- void operator()(std::size_t begin, std::size_t end){
- for (std::size_t i = begin; i < end; i++){
- RcppParallel::RMatrix<double>::Row row = inputMatrix.row(i);
- double partialEuclidianDistance = 0;
- for (unsigned int j = 0; j < row.length(); j++){
- if (oldColumns[j]){
- partialEuclidianDistance += row[j] * row[j];
- }
- }
- result[i] = partialEuclidianDistance;
- }
- }
- };
- // [[Rcpp::export]]
- void calculateEuclidianDistances(const Rcpp::NumericMatrix& deltaMatrix, const Rcpp::LogicalVector& oldColumns, Rcpp::NumericVector& resultEuclidianDistances){
- int length = deltaMatrix.nrow();
- EuclidianDistanceCalculator edc(deltaMatrix, resultEuclidianDistances, oldColumns);
- RcppParallel::parallelFor(0, length, edc);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement