【问题标题】:Rcpp sugar for NumericMatrixNumericMatrix 的 Rcpp 糖
【发布时间】:2014-06-25 23:55:13
【问题描述】:

对于NumericVector,我可以使用包含要子集的位置的IntegerVector 来子集较小的NumericVector

例如假设x<-c(1,2,2,3,4,5)idx<-c(1,3,4)xsub<-x[idx],即1 2 3

在 RCpp 中,我可以简单地使用 xsub=x[idx]

是否有类似的方法使用IntegerVectorNumericMatrix 的行进行子集化?

例如,以下代码 xmatsub=xmat(idx,_) 对我不起作用。

【问题讨论】:

  • 请注意 C++ 中的索引使用从 0 开始的索引,因此 x[idx] 将为您提供 2,3,4
  • 尽管超出了您要求的 Rcpp 糖分要求,但 arma(因此为 RcppArmadillo)提供了 submatrix views,它可以让您获得一些力量。它不是糖,当然也不是 Rcpp11/糖,但它仍然相当强大。我发现的一件不幸的事情是,我发现通常很难用arma 做一个函数的一部分,而用糖做剩下的部分。 (我不是 C++ 向导,所以我可能会遗漏一些东西。我遵从 @RomainFrancois 的 Rcpp 正确性。)
  • 好点。请从中作答。唯一有点不便的是,您必须在输出时复制数据。
  • 我倾向于在犰狳对象中进行这些类型的操作。
  • @RomainFrancois,是的,我一直在减去 1 来获得基于 0 的索引。

标签: r rcpp


【解决方案1】:

没有办法。您必须手动完成,这并不复杂。

NumericMatrix res( idx.size(), m.rows() )  ;
for( int i=0; i<idx.size(); i++){
    res.row(i) = m.row(idx[i]-1) ; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2020-01-09
    相关资源
    最近更新 更多