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

标签 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 中的矩阵相乘,但它并不是我们所知的标准矩阵乘积。你怎么会知道这些东西?

最佳答案

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

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

(以防在过程中遗漏:C++ 本身不支持矩阵运算。“C++”中没有矩阵乘法,仅在特定的库中,例如 Armadillo。)

关于c++ - 如何分别在R和C++中做两个矩阵的矩阵乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151466/

相关文章:

c++ - Qt-拆分字符串但将分隔符保留在数组中

C++ - 图像处理库还是计算机视觉库?

multithreading - 使用 Rcpp 和 OpenMP 在 R 中实现多线程和 SIMD 矢量化 Mandelbrot

R:列表中的快速哈希搜索(环境)

c++ - 为什么这种类型的删除实现(简化提升 :any) gives segmentation fault?

C++ 二进制表达式的无效操作数

r - 在 ARIMA 或 VAR 模型中选择特定滞后

r - 在 r 中使用 ggplot2 创建月份大小的 bin

r - 如何在 R 中的面板向量自回归(pVAR)后进行格兰杰因果关系检验?

c++ - 具有不同值的Rcpp函数填充矩阵