2016-05-11 17 views
-2

In RcppArmadillo, muss ich wissen, wie ich arma::mat in c-style Array double * für die Verwendung in anderen Funktionen konvertieren kann.Konvertieren Rcpp Armadillo Matrix zu double *

Wenn ich laufen die folgenden Funktionen, stürzt der Computer ab:

R Teil:

 nn3 <- function(x){ 
     results=.Call("KNNCV", PACKAGE = "KODAMA", x) 
     results 
     } 

C++ Teil:

 double KNNCV(arma::mat x) { 
     double *cvpred = x.memptr(); 
     return cvpred[1]; 
    } 

und am Ende, ich versuche:

 nn3(as.matrix(iris[,-5])) 

Können Sie hel Soll ich bitte die Fehler finden?

Antwort

4

Erstens gibt es keine solche Dinge wie Vektor in einem double* gespeichert. Sie können einen C-Style-Pointer auf Double drehen; aber ohne Länge Informationen, die Sie nicht viel kaufen.

Vereinbarungs am ähnlichsten C++ Klassen geben Ihnen einen .begin() Iterator zum Anfang des Speicherblocks (die Armadillo zu gewährleisten geschieht zusammenhängend zu sein, genau wie std::vector), so können Sie versuchen, dass.

Andere als die (sehr gut in der Tat) Armadillo documentation erzählt Ihnen über memptr() was wahrscheinlich ist, was Sie hier wollen. Gerade Kopie aus dem Beispiel dort:

 mat A = randu<mat>(5,5); 
const mat B = randu<mat>(5,5); 

     double* A_mem = A.memptr(); 
const double* B_mem = B.memptr(); 
+0

Könnten Sie mir helfen? –

Verwandte Themen