cbind
in R ist relativ zeitaufwendig in wiederholten Aufrufen, aber es ist auch für verschiedene Datentypen mächtig. Ich habe Code geschrieben, der 3x schneller ist als cbind
beim Binden von zwei Matrizen. Aber bind_cols
in dplyr
Paket ist nur 100X schneller als cbind
. Es ist nur schade, dass es Matrix nicht als Eingabe nehmen kann. Kann jemand den folgenden Code schneller machen? Auch, wie binde ich schnell spärliche Matrix? Hier ist der Code, den ich verwendet:R schnelle Cbind-Matrix mit 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))