【发布时间】:2015-06-21 22:07:12
【问题描述】:
我有一个程序,我需要在 Rcpp 中重复计算立方体X(nRow, nCol, nSlice) 的每个切片的列均值,结果均值形成矩阵M(nCol, nSlice)。以下代码产生了错误:
#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: 错误:没有匹配函数调用'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 矩阵”。数组将是另一回事。术语通常很重要。