나는 RcppEigen에서 가중 공분산을위한 함수를 작성하고있다. 단계 중 하나에서 행렬의 열 i와 열 j를 가져 와서 cwiseProduct를 계산하고 싶은데, 이는 어떤 종류의 벡터를 반환해야합니다. cwiseProduct의 출력은 여러 번 재사용 할 수있는 중간 변수로 들어갑니다. 문서에서 보면 cwiseProduct은 CwiseBinaryOp을 반환하며 그 자체로는 두 가지 유형이 있습니다. 내 cwiseProduct 두 개의 열 벡터에서 작동, 그래서 올바른 반환 형식이 Eigen::CwiseBinaryOp<Eigen::ColXpr, Eigen::ColXpr>
해야한다 생각했지만 오류 네임 스페이스에 ColXpr 아이겐고유 반환 형식의 .cwiseProduct?
#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]
Rcpp::List Crossprod_sparse(Eigen::MappedSparseMatrix<double> X, Eigen::Map<Eigen::MatrixXd> W) {
int K = W.cols();
int p = X.cols();
Rcpp::List crossprods(W.cols());
for (int i = 0; i < p; i++) {
for (int j = i; j < p; j++) {
Eigen::CwiseBinaryOp<Eigen::ColXpr, Eigen::ColXpr> prod = X.col(i).cwiseProduct(X.col(j));
for (int k = 0; k < K; k++) {
//double out = prod.dot(W.col(k));
}
}
}
return crossprods;
}
나는 또한 스파 스 벡터에 저장하는 시도를라는 이름의 멤버를 얻을
나는 제품을 저장하지 않으면Eigen::SparseVector<double> prod = X.col(i).cwiseProduct(X.col(j));
뿐만 아니라 컴퓨팅과 같은 있지만, 모든
X.col(i).cwiseProduct(X.col(j));
에 저장하지 전혀 함수는 매우 빨리 반환되어 cwiseProduct는 비싼 함수가 아니라는 것을 암시합니다. SparseVector에 저장하면 기능이 매우 느려서 SparseVector가 올바른 반환 유형이 아니며 Eigen이 해당 유형으로 가져 오기 위해 추가 작업을하고 있다고 생각하게 만듭니다.