2017-01-11 5 views
0

Ich habe einige Matlab-Skript in C++ zu übersetzen, also entschied ich mich, die Bibliothek Armadillo für die lineare Algebra Teile zu verwenden. Aber ich bin mit der conv() Funktion blockiert. Ich versuchte dies:Keine passende Funktion für Call to Conv (Armadillo-Bibliothek)

hist2=arma::hist(X2,nbins); 
arma::vec g (smoothingWindowWidth, 0.0); 
int halfWidth = smoothingWindowWidth/2; 
for (int i=0; i<smoothingWindowWidth; i++) 
{ 
    int n=i - halfWidth; 
    g[i]= exp(-0.5 *((n/((double)halfWidth))*(n/((double) halfWidth)))); 
} 
g=g/(arma::sum(g)); 
arma::vec hist3= arma::conv(hist2,g,"same"); 

Wenn ich versuche ich folgende Fehlermeldung zu kompilieren: "keine passende Funktion für Aufruf von 'Conv (arma :: UVEC &, arma :: vec &, int)'" .

hist2 wurde zuvor als uvec unter Verwendung der hist()-Funktion definiert. X2 ist ein vec und nbins ein int.

Ich bin mir nicht sicher, den Fehler zu verstehen: Es scheint, dass conv() nicht vec oder uvec als Parameter aber nach Überprüfung der Armadillo-Website muss es zu nehmen.

Ich habe versucht, die uvec in vec zu konvertieren, aber es hat nichts geändert.

Vielen Dank für Ihre Hilfe!

+0

"same" ist kein int. –

+0

Ich war so auf meine Vektoren konzentriert, dass ich den 'int' Teil nicht bemerkte. Ich verstehe nicht, warum 'same' ein int wäre. Ich versuche, "selbe" wie die Dokumentation in das Beispiel zu schreiben, aber es funktioniert immer noch nicht. Der Fehler ist 'keine passende Funktion für den Aufruf von' conv (arma :: uvec &, arma :: vec &, const char [5]) ' –

+0

@RomainMartin - Sie verwenden wahrscheinlich eine alte Version von Armadillo, die nicht hat die letzte 'conv()' -Funktion. Entfernen Sie die vorherige Version und installieren Sie die Version [next] (http://arma.sourceforge.net/download.html). – mtall

Antwort

1

Ok, schließlich war die Antwort ganz einfach: conv() nicht Mischtypen erlauben so dass ich zwei vec statt einer vec und ein uvec verwenden musste.

Ich war mir ziemlich sicher, dass ich das schon ausprobiert habe, aber vielleicht gab es in diesem Moment ein Problem mit meiner Installation.

Also habe ich Armadillo richtig neu installiert und sichergestellt, dass sowohl Lapack als auch BLAS von Armadillo gefunden wurden.

Dann füge ich hinzu: #define ARMA_DONT_USE_WRAPPER kurz vor #include<armadillo>

Nach Dabei arbeitete das Beispiel conv() in der Dokumentation.

So modifizierte ich meinen Code durch hist3 in eine vec Umwandlung:

arma::vec hist3=arma::conv_to<arma::vec>::from(arma::hist(X2,nbbins)); 

Dann funktionierte es!

Verwandte Themen