0

您好,很抱歉这个可能很愚蠢的问题。我过去学过一点 C++,但在过去几年里我只使用过 R。我需要为我使用 Rcpp 编写的包转换一些 R 代码,特别是,我正在使用 RcppArmadillo。现在我检查了文档,但我花了最后几个小时试图完成这项工作。假设我有一个矩阵 A 和一个索引向量 idx。如果我想提取一个仅包含与 idx 中包含的索引相对应的行的子矩阵,在 R 中我会这样做:

A[idx,]

在犰狳时,我正在这样做:

A.rows(idx);

其中 A 是一个mat对象。但是,我收到以下错误: not matching function for call to 'arma::Mat<double>::rows(arma::vec&)' 我做错了什么?在此先感谢您的帮助!

4

1 回答 1

2

查看 Armadillo API 文档以了解连续和非连续状态下的子矩阵。

arma::mat X = arma::randu<arma::mat>(10, 10);

arma::uvec indices;
indices << 2 << 3 << 6 << 8;

// Subset
X.rows(indices);

对于子集,请参阅有关此类情况的长篇文章:https ://gallery.rcpp.org/articles/armadillo-subsetting/

为了获得更多翻译指导,我不久前写了一篇关于常见R操作及其在 Armadillo 中的等价操作的指南。

https://thecoatlessprofessor.com/programming/cpp/common-operations-with-rcpparmadillo/

于 2020-08-01T16:58:01.130 回答