cbind
R'yi kullanarak tekrarlanan çağrılarda nispeten zaman alır, ancak çeşitli veri türleri için de güçlüdür. İki matris bağlanırken, cbind
'dan 3X daha hızlı yazılmış bir kod yazdım. Ancak dplyr
paketindeki bind_cols
, cbind
'dan yalnızca 100X daha hızlıdır. Matrisin girdi olarak alınamaması sadece üzücüdür. Birisi kodu daha hızlı yapabilir. Ayrıca, seyrek matrisi hızlı bir şekilde nasıl bağlarım? Böyle bir için de fenaR hızlı cbind matrisi, Rcpp
require(Rcpp)
func <- 'NumericMatrix mmult(NumericMatrix a,NumericMatrix b) {
//the colnumber of first matrix
int acoln=a.ncol();
//the colnumber of second matrix
int bcoln=b.ncol();
//build a new matrix, the dim is a.nrow() and acoln+bcoln
NumericMatrix out(a.nrow(),acoln+bcoln) ;
for (int j = 0; j < acoln + bcoln; j++) {
if (j < acoln) {
out(_,j) = a(_,j);
} else {
//put the context in the second matrix to the new matrix
out(_,j) = b(_,j-acoln);
}
}
return out ;
}'
a <- matrix(rep(1,2000*100),2000)
b <- matrix(rep(2,2000*10),2000)
cppFunction(func)
system.time(for (i in seq(1,800)) {mmult(a,b)})
system.time(for (i in seq(1,800)) {cbind(a,b)})
identical(mmult(a,b),cbind(a,b))