Arma-Vektorzuordnung mit flexibler Größe – stimmt das im Allgemeinen oder ist es eine Eigenschaft von Rcpp?

StackOverflow https://stackoverflow.com//questions/23044537

  •  21-12-2019
  •  | 
  •  

Frage

Ich verwende das Rcpp-Paket, um einen Code zu schreiben, dessen Hauptteil in C++ und der kleinere Teil in R geschrieben ist.

Basierend auf dem, was ich aus C++ weiß, sollten im Gegensatz zu R alle Variablen in C++ im Voraus deklariert werden, und diese Deklaration umfasst sowohl Typ als auch Größe.Wenn wir zum Beispiel sagen:

arma::vec test(2);

Dann gehe ich davon aus, dass es sich bei test um einen Armadillo-Vektor der Größe 2 handelt, was bedeutet, dass wir dem Test nichts einer anderen Größe zuweisen sollten.Ist das richtig?

Hier ist meine Herausforderung:

In meinem Code habe ich eine Schleife, die dem „Testvektor“ Vektoren unterschiedlicher Größe (normalerweise größer als 2) zuweist. ohne Neudeklaration des Tests.Zu meiner Überraschung funktioniert der Code einwandfrei und ohne Kompilierungsfehler!

So weise ich in jeder Iteration einen neuen Vektor zum Testen zu:

test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);

Frage:

Ist das eine Armadillo-Funktion, der wir Vektoren unterschiedlicher Länge zum Testen zuweisen können, die ursprünglich als Größe 2 deklariert wurde?oder ist es eine Rcpp-Paketfunktion?

Vielen Dank für Ihre Hilfe.

War es hilfreich?

Lösung

Sie fragen nach der Größe des Vektors, der in codiert werden soll Typ.Wenn Sie angeben, dass etwas vom Typ ist arma::vec, du erlaubst es zu akzeptieren arma::vecs jeder Größe.

Wenn Sie eine Größenbeschränkung im Typ erzwingen möchten, möchten Sie so etwas wie arma::vec::fixed<N>, wo in deinem Fall N wäre 2.Dies ist ein Typ, der die Einschränkung erzwingt, dass Vektoren eine Größe haben sollten N.Es gibt auch Typedefs für niedrigstellige Versionen davon, z.B. vec2 als fester Vektor der Größe 2.

Sie müssten Ihre ändern as Rufen Sie ähnlich an, glaube ich – hoffentlich funktioniert es, ich habe es nicht getestet.

Sie sollten das lesen Armadillo-Dokumente;Die Armadillo-Dokumente gehören wahrscheinlich zu den saubersten und nützlichsten, die es gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top