r - 矩阵索引中的负下标

标签 r rcpp rcpparmadillo

在 Rcpp/RcppArmadillo 中,我想要执行以下操作:从 n x n 矩阵 A,我想提取子矩阵 A[-j, -j],其中 j 是索引向量:在 R 中,它可以像

A = matrix(1:16, 4, 4)
j = c(2, 3)
A[-j, -j]

似乎此功能在 Rcpp 或 RcppArmadillo 中不可用 - 抱歉,如果我忽略了某些内容。 R 中的一种方法是

pos = setdiff(1:nrow(A), j)
A[pos, pos]

这将延续到 RcppArmadillo,但必须创建向量 pos 作为 j 的补集似乎很尴尬 - 而且我不知道如何有效地做到这一点。

有人有有效实现的想法/或分享一段代码吗?

最佳答案

Armadillo docs有功能.shed它接受一个参数“...包含要删除的行/列/切片的索引”。根据我的阅读,删除行和列将需要两次调用 .shed()

使用您的示例

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

// [[Rcpp::export]]
arma::mat fun(arma::mat X, arma::uvec row, arma::uvec col) {
  X.shed_cols(col); // remove columns
  X.shed_rows(row); // remove rows
  return(X);
}


/***R
A = matrix(1:16, 4, 4)
j = c(2, 3)
A[-j, -j]

# minus one for zero indexing
fun(A, j-1, j-1)
*/

关于r - 矩阵索引中的负下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73526486/

相关文章:

r - 准备具有外部依赖项的 CRAN R 包 (nlopt)

c++ - 在 Rcpp 和 C++ 之间转换 vector (使用 Rcpp::as 或 Rcpp::wrap)是否会创建一个新 vector 并复制元素?

c++ - 在 Rcpp (Armadillo) 函数中使用数字序列作为默认参数

r - 在 Rcpp 中检查向量的 Null 和 NA

r - emmeans 包和交互包之间的简单斜率估计不同?

r - 管道如何与 purrr map() 函数和 "."(点)符号一起使用

c++ - 使用 RcppArmadillo 时无法加载 Armadillo Cube<uword>

python - 是否有相当于 dplyr::summarise 的 Pandas ?

c++ - 无形中返回结果

c++ - 如何使用Rcpp使执行就地操作的C++函数可用于另一个R包?