我有一個程序,我需要反覆計算Rcpp中立方體X(nRow, nCol, nSlice)
的每個切片的列平均值,所得到的平均值形成矩陣M(nCol, nSlice)
。下面的代碼產生的錯誤:列意味着3d矩陣(立方體)Rcpp
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
mat cubeMeans(arma::cube X){
int nSlice = X.n_slices;
int nCol = X.n_cols;
int nRow = X.n_rows;
arma::vec Vtmp(nCol);
arma::mat Mtmp(nRow, nCol);
arma::mat Means(nCol, nSlice);
for (int i = 0; i < nSlice; i++){
Mtmp = X.slice(i);
for(int j = 0; j < nCol; j++){
Vtmp(j) = sum(Mtmp.col(j))/nRow;
}
Means.col(i) = Vtmp;
}
return(wrap(Means));
}
'/Rcpp/internal/Exporter.h:31:31: error: no matching function for call to 'arma::Cube::Cube(SEXPREC*&)'
我不能完全弄清楚。當函數的輸入是一個矩陣(並返回一個向量)時,我沒有得到錯誤。然而,我包括上述功能作爲我的主程序即
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
mat cubeMeans(arma::cube X){
int nSlice = X.n_slices;
...
return(Means);
}
// [[Rcpp::export]]
main part of program
成功編譯該程序的一部分,但它是非常緩慢(幾乎爲使用colMeans
程序中的R版本慢)。有沒有更好的方法來計算多維數據集中的列方法,以及爲什麼會得到該編譯錯誤?
我很感激任何幫助。
問候,
幾乎和colMeans一樣慢? ...就是這樣。 'colMeans'在C語言中進行了優化。您缺少提供用於運行此程序的代碼可能包含回答問題的線索。順便說一下,R中沒有「3d矩陣」。陣列將是另一回事。術語通常很重要。 –