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))

Antworten auf die Frage(2)

Ihre Antwort auf die Frage