RcppEigen稀疏和稠密矩阵基本操作

问题描述 投票:0回答:0

一般来说,我对 Rcpp、RcppEigen 和通过 C++ 实现 R 非常陌生。 here 阅读文档或查找有关该主题的任何详尽/直观的教程对我来说既困难又令人困惑。所以我想问一下这个包的一些基础知识。

假设我在 R 中有一个稀疏矩阵 A、一个密集矩阵 B 和一个向量 y:

library(Matrix)
A <- matrix(c(0, 1, 3, 0, 4, 0, 0, 0, 6), ncol = 3)
A <- Matrix(A, sparse = T)
B <- matrix(1:9, ncol=3)
y <- 5:3

我想在cpp文件中写一些函数来做A、B和y的转置、跟踪、乘法和叉积,但我总是出错,因为我定义了错误的输出类或者我不知道正确的方法每个班级。例如,

// [[Rcpp::export]]
SEXP cpp_t(const Eigen::Map<Eigen::MatrixXd> A){
    Eigen::MatrixXd C = A.transpose();

    return Rcpp::wrap(C);
}
cpp_t(B)

给我错误

Wrong R type for mapped matrix
,这让我真的很困惑。你能帮我得到 A、B 的转置,A、B 的迹,
A%*%B
A%*%y
B%*%y
as.matrix(y)
与 RcppEigen 的乘法吗?

c++ r rcpp matrix-multiplication rcppeigen
© www.soinside.com 2019 - 2024. All rights reserved.