我正在尝试将对角矩阵传递W
给 Rcpp 函数。问题是它W
的大小为 1,000,000 x 1,000,000,(我认为)远远超出 Armadillo 允许的限制(即使使用启用了 ARMA_64BIT_WORD 的 C++11 编译器)。
由于W
是对角矩阵,因此非常稀疏。出于这个原因,我首先生成了一个密集表示W
(使用 Matrix 包函数对角线)。然后我将这些压缩表示传递W
给我的函数。我认为这将解决任何内存问题。这是一个小例子:
C++ 代码:
#define ARMA_64BIT_WORD 1
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins(cpp11)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
int test(sp_mat W){
return 0;
}
代码:
# define the diagonal matrix
nrows <- 1e6
W <- Matrix::Diagonal(nrows)
# call Rcpp function
test(W)
但是,尽管使用了压缩表示,我仍然收到此错误。
error: SpMat::init(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD
有什么方法可以处理W
,以便我可以将它传递到test
并执行矩阵运算?
此处提出了类似的问题。但是,我认为@Dirk 提供的解决方案在这种情况下有效,因为与我的W
.