R schnelle Bindung mat, rix mit Rcpp
cbind
in R ist bei wiederholten Aufrufen relativ zeitaufwendig, aber auch für verschiedene Datentypen leistungsstark. Ich habe Code geschrieben, der 3X schneller ist alscbind
beim Binden von zwei Matrizen. Aberbind_cols
imdplyr
package ist nur 100x schneller alscbind
. Es ist nur schade, dass es keine Matrix als Eingabe nehmen kann. Kann jemand den Code unten schneller machen. Wie binde ich außerdem eine dünne Matrix schnell? Hier ist der Code, den ich verwendet habe:
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))