Как сделать матричное произведение двух матриц в R и C ++ соответственно - PullRequest
0 голосов
/ 15 мая 2019

У меня есть вопрос, почему умножение матриц %*% в 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 Ответ

1 голос
/ 15 мая 2019

R и C ++ - это разные языки. Нет никаких оснований ожидать, что они поделятся синтаксисом. Вы должны быть более удивлены, когда синтаксис совпадает, чем когда он отличается.

Тем не менее, когда у вас есть пакет, такой как Rcpp, который интегрирует языки, обычно есть некоторая попытка привести синтаксис в соответствие. Так почему бы не использовать тот же оператор, что и R, в этом случае? Потому что это невозможно. Список операторов в C ++ фиксирован, и %*% в этом списке нет. Тем не менее, оператор * находится в списке, так что оператор может быть выбран. Всегда лучше выбрать то, что можно выбрать, чем не работать. :)

(В случае, если это упущено: C ++ не имеет встроенной поддержки матричных операций. Матричное умножение «в C ++» отсутствует, только в определенных библиотеках, таких как Armadillo.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...