如何分别在R和C ++中做两个矩阵的矩阵乘积

时间:2019-05-15 14:13:38

标签: c++ r rcpp

我有一个问题,为什么矩阵乘法在R中是%*%而在C ++中只是*

示例:

在R脚本中:

FunR <- function(mX, mY) {
  mZ = mX %*% mY
  mZInv = solve(mZ)
  return(mZInv)
}

在C ++脚本中:

  // [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
  using namespace Rcpp;
  using namespace arma;

  // [[Rcpp::export]]
  mat FunC(mat mX, mat mY) { 
    mat mZ = mX * mY;
    mat mZInv = mZ.i();
   return mZInv; 
  }

我问,因为C ++可以很容易地合并到R文档中。

此外,“ *”字符用于将R中的矩阵相乘,但它不是我们所知道的标准矩阵乘积。你应该怎么知道这些东西?

1 个答案:

答案 0 :(得分:1)

R和C ++是不同的语言。没有理由期望他们共享语法。当语法匹配时,应该比语法不同时感到惊讶。

这就是说,当您拥有一个集成了语言的程序包(如Rcpp)时,通常会尝试使语法保持一致。那么,为什么在这种情况下不使用与R相同的运算符呢?因为这是不可能的。 C ++中的运算符列表是固定的,%*%不在该列表中。但是,运算符*在列表中,因此可以选择该运算符。总是选择一个可以选择的东西总比什么都不做要好。 :)

(以防万一被遗忘:C ++不原生支持矩阵运算。“在C ++中”不存在矩阵乘法,只有在特定的库中,例如Armadillo。)