【发布时间】: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]。
是否有类似的方法使用IntegerVector 对NumericMatrix 的行进行子集化?
例如,以下代码 xmatsub=xmat(idx,_) 对我不起作用。
【问题讨论】:
-
请注意 C++ 中的索引使用从 0 开始的索引,因此
x[idx]将为您提供2,3,4。 -
尽管超出了您要求的 Rcpp 糖分要求,但 arma(因此为
RcppArmadillo)提供了 submatrix views,它可以让您获得一些力量。它不是糖,当然也不是 Rcpp11/糖,但它仍然相当强大。我发现的一件不幸的事情是,我发现通常很难用arma做一个函数的一部分,而用糖做剩下的部分。 (我不是 C++ 向导,所以我可能会遗漏一些东西。我遵从 @RomainFrancois 的Rcpp正确性。) -
好点。请从中作答。唯一有点不便的是,您必须在输出时复制数据。
-
我倾向于在犰狳对象中进行这些类型的操作。
-
@RomainFrancois,是的,我一直在减去 1 来获得基于 0 的索引。