我有一个问题,为什么矩阵乘法在 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 中的矩阵相乘,但它并不是我们所知的标准矩阵乘积。你怎么会知道这些东西?
最佳答案
R 和 C++ 是不同的语言。没有理由期望它们共享语法。当语法匹配时,您应该比语法不同时更惊讶。
话虽这么说,当您有一个集成语言的包(如 Rcpp)时,通常会尝试使语法保持一致。那么在这种情况下为什么不使用与 R 相同的运算符呢?因为这是不可能的。 C++ 中的运算符列表是固定的,%*%
不在该列表中。不过,运算符 *
在列表中,因此可以选择该运算符。选择可以选择的东西总是比什么都不做要好。 :)
(以防在过程中遗漏:C++ 本身不支持矩阵运算。“C++”中没有矩阵乘法,仅在特定的库中,例如 Armadillo。)
关于c++ - 如何分别在R和C++中做两个矩阵的矩阵乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151466/