임의의 상태를 Eigen의 setRandom
에 RcppEigen으로 전달하는 방법이 있습니까? 아니면 runif
을 사용해야합니까? 여기 임의의 상태를 RcppEigen을 사용하여 setRandom에 전달하십시오.
// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>
using namespace Rcpp;
using Eigen::MatrixXd;
using Eigen::VectorXd;
// [[Rcpp::export]]
NumericVector fx() {
RNGScope scope;
MatrixXd x(3,2);
x=x.setRandom();
x.col(1)=as<VectorXd>(runif(3,0,1));
return wrap(x);
}
테스트 그것을 : 2 열 (즉, runif
)을 재현하는 방법
set.seed(42); fx()
# [,1] [,2]
#[1,] -0.8105760 0.9148060
#[2,] 0.6498853 0.9370754
#[3,] 0.6221027 0.2861395
set.seed(42); fx()
# [,1] [,2]
#[1,] -0.9449154 0.9148060
#[2,] 0.8063267 0.9370754
#[3,] -0.0673205 0.2861395
참고하지만, 1 열 (즉, setRandom
)이 아니다.
네, 또한'srand'를 사용할 수 있다는 것을 알았지 만, 그 말은 시드에 매개 변수를 사용해야한다는 의미입니다. 확실히 할 수는 있지만, R 레벨에서'set.seed'와의 인터페이싱을 처리해야하는데, 이것은 최적이 아닌 것 같습니다. – Roland
내가 직각이라고 말한 것을 보았습니까? 이들은 ** 두 개의 다른 RNG **이고 그 중 하나는 실제로 그렇게 좋지 않습니다. 그러나 간단히 말해서, 두 개의 서로 다른 RNG 사용을 주장 할 때 두 개의 다른 RNG를 시드해야합니다. 무료 점심은 안되요. –
그 점을 이해합니다. 나는 또한 얼마나 빨리 '(runif (3,0,1)); 대안으로 벤치 마크 할 것이다. 너무 느리면'sample '을 사용할 수 있습니다.int (2^31-1, 1)'을 사용하여'srand'에 전달하는 정수를 얻습니다. – Roland