8

RcppArmadillo 関数 (約 30,000*30,000) に大きな行列を渡したいのですが、この渡しだけですべてのパフォーマンスの向上が食い尽くされているように感じます。引数で高度なコンストラクターを使用するための提案された解決策とともに、ここでも質問が提起されました。copy_aux_mem = false何も変更せずにマトリックスから行を読み取るだけでよいため、これも良い解決策のようです。ただし、ソリューションを正しく実装する際に問題があります。これはおそらく単純な構文の質問です。

これが私の現在の関数呼び出しのセットアップです(もちろん単純化されています):

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec test(arma::mat M) {
    return(M.row(0))
}

これは、行列 M が大きいとかなり遅くなります (たとえば、ここM=matrix(rnorm(30000*30000), nrow=30000, ncol=30000)に記載されている高度なコンストラクターを使用したいと思います。構文は、「参照渡し」に設定する必要があります。関数定義. でこれをどのように使用しますか?mat(aux_mem*, n_rows, n_cols, copy_aux_mem = true, strict = true)copy_aux_memfalsearma::vec test(arma::mat M) {

4

2 に答える 2

5

の CRAN バージョンではRcppArmadillo、次のような構文を使用します。

void foo( NumericMatrix x_ ){
    arma::mat M( x_.begin(), x_.nrow(), x_.ncol(), false ) ;
    // do whatever with M
}

これは、Rcpp ギャラリーのいくつかの記事を含め、多くの場所で使用されています。

于 2013-09-18T10:50:45.223 に答える