我有一个问题,为什么矩阵乘法在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中的矩阵相乘,但它不是我们所知道的标准矩阵乘积。你应该怎么知道这些东西?
答案 0 :(得分:1)
R和C ++是不同的语言。没有理由期望他们共享语法。当语法匹配时,应该比语法不同时感到惊讶。
这就是说,当您拥有一个集成了语言的程序包(如Rcpp)时,通常会尝试使语法保持一致。那么,为什么在这种情况下不使用与R相同的运算符呢?因为这是不可能的。 C ++中的运算符列表是固定的,%*%
不在该列表中。但是,运算符*
在列表中,因此可以选择该运算符。总是选择一个可以选择的东西总比什么都不做要好。 :)
(以防万一被遗忘:C ++不原生支持矩阵运算。“在C ++中”不存在矩阵乘法,只有在特定的库中,例如Armadillo。)