2017-01-11 11 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型)CONV'をへの呼び出しのためのなしマッチング機能を" 。

hist2は、hist()機能を使用して以前にuvecとして定義されています。 X2は、vecnbinsintです。

conv()は、またはuvecをパラメータとして使用していないようですが、Armadilloのウェブサイトを確認した後であることがわかります。

uvecvecに変換しようとしましたが、何も変更されませんでした。

ありがとうございました!

+0

"same"はintではありません。 –

+0

私は自分のベクトルに集中していたので、「int」の部分に気付かなかった。 なぜ「同じ」がintであるのか分かりません。私は "同じ"と入力しようとしましたが、この例ではドキュメントが実行されましたが、それでも動作しません。エラーは 'conv(arma :: uvec&amp; arma :: vec&const char [5])'の呼び出しに一致する関数がありません。 –

+0

@RomainMartin - おそらく旧バージョンのArmadilloを使用しています最新の 'conv()'関数です。以前のバージョンを削除し、[latest](http://arma.sourceforge.net/download.html)バージョンをインストールしてください。 – mtall

答えて

1

[OK]を、最終的な答えは非常に簡単だった:私は2 vec代わりに1 vecと1 uvecの使用していたので、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)); 

そして、それは働きました!

関連する問題