Поскольку я немного новичок в Rcpp, я мог бы упустить трюк здесь.
Давайте создадим две матрицы:
library(Rcpp)
library(microbenchmark)
P <- matrix(0, 200,500)
for(i in 1:500) P[,i] <- rep(rep(sample(0:1), 2), 25)
Parent_Check <- matrix(0, nrow(P), nrow(P))
Теперь я хочу сделать следующее:
Test1 <- function(){
for (i in 1:nrow(P)) {
Parent_Check[i,] <- apply(P, 1, function(x) all(x == P[i,]))
}
}
Test1()
Затем я создал версию Rcpp для всех () в надежде улучшить скорость, определенную как:
Rcpp::cppFunction(
'bool all_C(LogicalVector x) {
// Note the use of is_true to return a bool type.
return is_true(all(x == TRUE));
}
'
)
При проверке скорости с помощью all_C она оказывается медленнее:
Test2 <- function(){
for (i in 1:nrow(P)) {
Parent_Check[i,] <- apply(P, 1, function(x) all_C(x == P[i,]))
}
Parent_Check
}
microbenchmark::microbenchmark(Test1(), Test2(), times = 10)
expr min lq mean median uq max neval
Test1() 467.9671 471.1590 488.1784 479.4830 485.4755 578.5338 10
Test2() 544.6561 552.7025 587.8888 570.4416 641.1202 657.7581 10
Проблема в том, что all_C () медленнее, чем all (), поэтому я подозреваю, что медленная скорость для Test2 () требует лучшего вызова all_C, а также способа избежать применения в приведенном выше примере.
Я пытался переписать применение в Rcpp, используя этот ответ , но использование этой функции применения Rcpp делает его еще медленнее.
Любые идеи о том, как улучшить скорость Test1 ()используя Rcpp?