Распределение векторов arma с гибким размером - верно вообще или является свойством Rcpp?

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Я использую пакет Rcpp для написания кода, основная доля которого написана на C ++, а меньшая - на R.

Основываясь на том, что я знаю из C ++, в отличие от R, все переменные в C ++ должны быть объявлены заранее, и это объявление включает как тип, так и размер.Например , когда мы говорим:

arma::vec test(2);

тогда я предполагаю, что test - это вектор armadillo размером 2, что означает, что мы не должны назначать что-либо другого размера для тестирования.Это правда?

Вот мой вызов:

В моем коде у меня есть цикл, который присваивает векторы разного размера (обычно больше 2) "тестовому вектору" без повторное объявление теста .К моему удивлению, код работает совершенно нормально, без каких-либо ошибок компиляции!

На каждой итерации вот как я назначаю новый вектор для тестирования:

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

Вопрос:

Это особенность Armadillo, которой мы можем назначать векторы разной длины для тестирования, которые изначально объявлены размером 2?или это функция пакета Rcpp?

Большое спасибо за вашу помощь.

Это было полезно?

Решение

Вы запрашиваете размер вектора, который должен быть закодирован в Тип.Когда вы указываете, что что-то имеет тип arma::vec, вы позволяете ему принимать arma::vecs любого размера.

Если вы хотите применить ограничение размера в типе, то вам нужно что-то вроде arma::vec::fixed<N>, где в вашем случае N было бы 2.Это тип, который применяет ограничение на то, что векторы должны иметь размер N.Существуют также typedefs для их версий с низким значением, например vec2 как фиксированный вектор размером 2.

Вам пришлось бы изменить свой as вызывайте аналогично, я верю - надеюсь, это сработает, я это не тестировал.

Вам следует прочитать Документы броненосца;документы Armadillo, вероятно, одни из самых чистых и полезных в мире.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top