, 즉 벡터 fv
의 첫번째 소자가 매트릭스 tm
모든 컬럼 1 요소 승산 된 행렬 열 (2)에 의해 제 등RcppEigen -이 행렬 곱셈에있어 잘못된 점은 무엇입니까? I 간단한 마드 제품려고
최소 예 : 이것은 단순히 첫 번째 열을 방송보다는 tm
를 반환해야
set.seed(123)
tm <- matrix(rnorm(25,2,1),nrow=5)
fv <- rep(1,5)
tm
[,1] [,2] [,3] [,4] [,5]
[1,] 1.439524 3.7150650 3.224082 3.78691314 0.9321763
[2,] 1.769823 2.4609162 2.359814 2.49785048 1.7820251
[3,] 3.558708 0.7349388 2.400771 0.03338284 0.9739956
[4,] 2.070508 1.3131471 2.110683 2.70135590 1.2711088
[5,] 2.129288 1.5543380 1.444159 1.52720859 1.3749607
library(inline)
etest <- cxxfunction(signature(tm="NumericMatrix",
fv="NumericVector"),
plugin="RcppEigen",
body="
NumericVector fvv(fv);
NumericMatrix tmm(tm);
const Eigen::Map<Eigen::MatrixXd> ttm(as<Eigen::Map<Eigen::MatrixXd> >(tmm));
const Eigen::Map<Eigen::VectorXd> ffv(as<Eigen::Map<Eigen::VectorXd> >(fvv));
Eigen::MatrixXd prod = ttm*ffv.transpose();
return(wrap(prod));
")
etest(tm,fv)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.439524 1.439524 1.439524 1.439524 1.439524
[2,] 1.769823 1.769823 1.769823 1.769823 1.769823
[3,] 3.558708 3.558708 3.558708 3.558708 3.558708
[4,] 2.070508 2.070508 2.070508 2.070508 2.070508
[5,] 2.129288 2.129288 2.129288 2.129288 2.129288
, 나는 그것이 실제로하고있는 생각하는지 모르겠어요. 나는 명백한 것을 생략하고 있는가?
편집 : etest(tm,diag(fv))
내가 원하는 것을 제공하지만 이것이 고유 안에서 수행 할 수 있어야합니까?
감사합니다. Dirk. 나는 더 명확하지 않다는 점에 유감스럽게 생각합니다.이 예는 좀 더 일반적인 문제는 아니지만 실례입니다. 제가 정말로하고 싶은 것은 임의의 벡터를'fv'로 전달하고 컬럼 단위의 곱셈을하는 것입니다. 필자는 선형 대수학의 표준 곱셈은 아니라고 인정하지만, 행렬 감각으로 할 수 있다면 요소 별 순수 Rcpp 솔루션보다 약간의 이득을 기대하고 있습니다. http://eigen.tuxfamily.org/dox/group__QuickRefPage.html –
우리는 동시에 편집 한 것처럼 보이므로 추가 한 두 줄을 참조하십시오. 다른 작업이 필요한 경우 필요에 따라 구현하십시오. –
감사. 실제로이 작업을 제대로 수행하지 못하는 것 같아서 조작원을 학대했습니다. 나는 대각선으로 더 놀아 볼 것입니다. –