유연한 크기의 arma 벡터 할당 - 일반적으로 사실입니까, 아니면 Rcpp의 속성입니까?

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

  •  21-12-2019
  •  | 
  •  

문제

나는 Rcpp 패키지를 사용하여 대부분이 C++로 작성되고 더 작은 비율이 R로 작성된 코드를 작성하고 있습니다.

내가 C++에서 알고 있는 바에 따르면 R과 달리 C++의 모든 변수는 미리 선언되어야 하며 이 선언에는 유형과 크기가 모두 포함됩니다.예를 들어 우리가 다음과 같이 말할 때:

arma::vec test(2);

그런 다음 테스트는 크기가 2인 아르마딜로 벡터라고 가정합니다. 즉, 테스트할 크기가 다른 어떤 것도 할당해서는 안 된다는 뜻입니다.그렇죠?

내 도전은 다음과 같습니다.

내 코드에는 "테스트 벡터"에 다른 크기(보통 2보다 큼)의 벡터를 할당하는 루프가 있습니다. 없이 테스트 재선언 .놀랍게도 코드는 컴파일 오류 없이 완벽하게 작동합니다!

각 반복에서 테스트할 새 벡터를 할당하는 방법은 다음과 같습니다.

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

질문:

처음에 크기 2로 선언된 테스트에 서로 다른 길이의 벡터를 할당할 수 있는 Armadillo 기능인가요?아니면 Rcpp 패키지 기능인가요?

도움을 주셔서 대단히 감사합니다.

도움이 되었습니까?

해결책

당신은 벡터의 크기를 유형.어떤 것이 유형이라고 지정할 때 arma::vec, 당신은 그것이 수락하도록 허용합니다 arma::vec어떤 크기든지요.

유형에 크기 제한을 적용하려면 다음과 같은 것을 원합니다. arma::vec::fixed<N>, 귀하의 경우에는 N 2가 될 것이다.이는 벡터의 크기가 일정해야 한다는 제약 조건을 적용하는 유형입니다. N.낮은 숫자 버전에 대한 typedef도 있습니다. vec2 크기 2의 고정 벡터로.

당신은 당신을 수정해야 할 것입니다 as 비슷하게 전화해 보세요. 작동하길 바라지만 테스트하지는 않았습니다.

당신은 읽어야합니다 아르마딜로 문서;Armadillo 문서는 아마도 가장 깨끗하고 유용한 문서일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top