C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – Rcpp NumericMatrix – 如何擦除行/列?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我学习Rcpp类/数据结构时的新手问题:是否有成员函数来擦除类Rcpp :: NumericMatrix对象的行/列? (或其他类型的**矩阵 – 我假设它是一个模板类)?
library(Rcpp)
cppFunction('
  NumericMatrix sub1 {NumericMatrix x,int& rowID,int& colID) {
    // let's assume separate functions for rowID or colID
    // but for the example case here
    x.row(rowID).erase(); // ??? does this type of member function exist?
    x.col(colID).erase(); // ???
    return x;
}')

如果这种类型的成员函数不存在,那么这个怎么样?

cppFunction('NumericMatrix row_erase (NumericMatrix& x,int& rowID) {
  // a similar function would exist for removing a column.
  NumericMatrix x2(Dimension(x.nrow()-1,x.ncol());
  int iter = 0; // possibly make this a pointer?
  for (int i = 0; i < x.nrow(); i++) {
    if (i != rowID) {
      x2.row(iter) = x.row(i);
      iter++;
    }
  }
  return x2;
}')

或者我们希望删除一组行/列:

cppFunction('NumericMatrix row_erase (NumericMatrix& x,IntegerVector& rowID) {
  // a similar function would exist for removing a column.
  rowID = rowID.sort();

  NumericMatrix x2(Dimension(x.nrow()- rowID.size(),x.ncol());
  int iter = 0; // possibly make this a pointer?
  int del = 1; // to count deleted elements
  for (int i = 0; i < x.nrow(); i++) {
    if (i != rowID[del - 1])
      x2.row(iter) = x.row(i);
      iter++;
    } else {
      deL++;
    }
  }
  return x2;
}')

解决方法

使用RcppArmadillo怎么样?我认为代码的意图会更清楚……
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace arma;

// [[Rcpp::export]]
mat sub1( mat x,uword E) {
  x.shed_col(e-1);
  x.shed_row(e-1);
  return x;
}

/*** R
sub1( matrix(1:9,3),2 )
*/
> sub1( matrix(1:9,2 )
     [,1] [,2]
[1,]    1    7
[2,]    3    9

大佬总结

以上是大佬教程为你收集整理的c – Rcpp NumericMatrix – 如何擦除行/列?全部内容,希望文章能够帮你解决c – Rcpp NumericMatrix – 如何擦除行/列?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。