Rcpp犰狳,子矩阵和子向量

Cel*_*llo 0 armadillo submatrix rcpp

我尝试将一些 R 代码翻译成RcppArmadillo,因此我还想执行以下操作:

假设有一个非负向量v和一个矩阵M,例如m行。M每当向量的相应行中有零时,我想删除矩阵中的所有行v,然后也删除向量中所有为零的条目v。使用 R 这只是以下内容:

M = M[v>0,]

v = v[v>0] 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是在 RcppArmadillo 中是否有办法做到这一点。由于我对任何编程语言都很陌生,因此我找不到任何可以解决我的问题的东西,尽管我认为我不是第一个提出这个可能很简单的问题的人。

coa*_*ess 5

当然,有一种方法可以在 Rcpp(使用 Rcpp 进行子集化)和 RcppArmadillo(Armadillo 子集化)中对元素进行集化

这是在犰狳中复制 R 子集行为的方法。

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;

// Isolate by Row
// [[Rcpp::export]]
arma::mat vec_subset_mat(const arma::mat& x, const arma::uvec& idx) {
  return x.rows(find(idx > 0));
}

// Isolate by Element
// [[Rcpp::export]]
arma::vec subset_vec(const arma::vec& x) {
  return x.elem(find(x > 0));
}

/*** R
set.seed(1334)
m = matrix(rnorm(100), 10, 10)
v = sample(0:1, 10, replace = T)

all.equal(m[v>0,], vec_subset_mat(m,v))
all.equal(v[v>0], as.numeric(subset_vec(v)))
*/
Run Code Online (Sandbox Code Playgroud)