2017-01-11 3 views
0

C++에서 번역 할 matlab 스크립트가 있으므로 선형 대수 파트에 Armadillo 라이브러리를 사용하기로 결정했습니다. 그러나 conv() 기능으로 차단되었습니다. 나는이 시도 :conv (armadillo 라이브러리) 호출에 대한 일치 함수가 없음

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"); 

나는 다음과 같은 오류 얻을 컴파일하려고하면 " '(ARMA : uvec &, ARMA : VEC &, int)에 전환'을에 호출 일치 기능을" .

hist2hist() 기능을 사용하여 이전에 uvec으로 정의되었습니다. X2vec이고 nbinsint입니다.

나는 conv()vec 또는 uvec을 매개 변수로 사용하지는 않지만 Armadillo 웹 사이트를 확인한 후에 오류를 이해하고 있는지 잘 모르겠습니다.

uvecvec으로 변환하려고했지만 아무 것도 변경하지 않았습니다.

도움 주셔서 감사합니다.

+0

"동일"은 int가 아닙니다. –

+0

나는 내 벡터에 너무 집중하여 'int'부분을 알아 채지 못했습니다. 왜 '동일'이 int인지 이해할 수 없습니다. 이 예제에서 문서화와 똑같은 내용을 입력하려고했지만 여전히 작동하지 않습니다. 오류는 'conv (arma :: uvec &, arma :: vec &, const char [5])'호출과 일치하는 함수가 없습니다. –

+0

@RomainMartin - 아마 Armadillo의 이전 버전을 사용하고 있습니다. 최신의'conv()'함수. 이전 버전을 제거하고 [latest] (http://arma.sourceforge.net/download.html) 버전을 설치하십시오. – mtall

답변

1

좋아, 마지막 대답은 아주 간단했다 : 나는 두 vec 대신 한 vecuvec의 사용했다, 그래서 conv() 혼합 유형을 허용하지 않습니다.

나는 이미이 도구를 사용해 보았지만 아마도 현재 설치에 문제가있을 수 있습니다.

이렇게 Armadillo를 올바르게 다시 설치하여 Lapack과 BLAS가 Armadillo에서 발견되는 곳을 확인했습니다.

그럼 내가 추가 #define ARMA_DONT_USE_WRAPPER 단지

#include<armadillo>하기 전에이 작업을 수행 한 후, 문서에 주어진 conv()의 예는했다.

그래서 나는 vechist3 변환하여 내 코드를 수정 :

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

는 그런 일했다!