如何在 R 中使用 Rcpparmadillo 传入行向量?

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

我正在使用 Rcpp for R 编写一个函数,我想在其中执行向量叉积。所以在 R 中我正在表演

t(v)%*%v

所以我编写了以下 Rcpp 函数来执行此操作

arma_code <-
    "arma::mat arma_vv(const arma::vec& v1, const arma::vec& v2) {
       return v1.t() * v2;
   };"
arma_vv = cppFunction(code = arma_code, depends = "RcppArmadillo")

这工作正常,但我宁愿处理 R 中的转置,因为有些情况下 v1 在输入之前已被转置,所以我尝试了以下方法

arma_code <-
    "arma::mat arma_vv(const arma::vec& v1, const arma::vec& v2) {
       return v1 * v2;
   };"
arma_vv = cppFunction(code = arma_code, depends = "RcppArmadillo")

但它似乎将 v1 转换为列向量,即使我将其作为行向量传递,所以我收到错误

Error: matrix multiplication: incompatible matrix dimensions: 1000x1 and 1000x1
r matrix vector rcpp rcpparmadillo
1个回答
0
投票

用几分钟(通常非常好且易于访问)犰狳文档将清楚地表明,对于一致外部产品,您需要一个列向量(或

arma::colvec
)和行向量(或
arma::rowvec
)。

RcppArmadillo 两者都支持,但

arma::vec
arma::colvec
的简写。

> code <- "arma::mat vp(arma::colvec cv, arma::rowvec rv) { return cv * rv; }"
> Rcpp::cppFunction(code, depends = "RcppArmadillo")
> vp(as.numeric(1:4), as.numeric(1:4))
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    2    4    6    8
[3,]    3    6    9   12
[4,]    4    8   12   16
> 
© www.soinside.com 2019 - 2024. All rights reserved.