在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的补充-我不确定如何有效地做到这一点.

有没有人有一个有效的实现或一段代码可以分享的 idea ?

推荐答案

Aradillo 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相关问答推荐

过滤Expand.Grid的结果

为什么stat_bin在R中的ggplot中显示错误的数字?

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

以R表示的gglikert地块调整总数

卸载安装了BRM的模型发出的警告

根据固定值范围在tible中添加新行

如何使用geom_sf在边界显示两种 colored颜色 ?

如何使用stat_extract_all正确提取我的目标值?

随机森林回归:下拉列重要性

迭代通过1个长度的字符串长字符R

使用strsplit()将向量操作为数据框

使用较长的查询提取具有部分匹配的列表中的较短目标,

DEN扩展包中的RECT树形图出现异常行为

您是否可以将组添加到堆叠的柱状图

观察器中的inaliateLater的位置

是否有可能从边界中找到一个点值?

SHILINY中DT列的条件着色

Broom.Mixed::Augment不适用于Sample::分析

如果极点中存在部分匹配,则替换整个字符串

在R中使用ggraph包排列和着色圆