调用conv(armadillo库)没有匹配函数

时间:2017-01-11 17:59:45

标签: c++ armadillo

我有一些matlab脚本要在C ++中翻译,所以我决定使用Armadillo库来获取线性代数部分。 但是我被conv()功能阻止了。我试过这个:

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

当我尝试编译时,我收到以下错误:&#34; 没有匹配函数来调用&#39; conv(arma :: uvec&amp;,arma :: vec&amp;,int)&#39 ; &#34;

hist2以前使用uvec函数定义为hist()X2vecnbinsint

我不确定是否理解错误:conv()似乎没有vecuvec作为参数,但在检查之后犰狳网站必须。

我尝试将uvec转换为vec,但它没有改变任何内容。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

好的,最后答案非常简单:conv()不允许使用混合类型,因此我必须使用两个vec而不是一个vec和一个uvec

我很确定已经尝试过这个但是此刻我的安装可能有问题。

所以我正确地重新安装了Armadillo,确保了犰狳和BLAS在Armadillo找到的地方。

然后我在#define ARMA_DONT_USE_WRAPPER

之前添加:#include<armadillo>

执行此操作后,文档中给出的conv()示例有效。

所以我通过将hist3转换为vec

来修改我的代码
arma::vec hist3=arma::conv_to<arma::vec>::from(arma::hist(X2,nbbins));

然后它奏效了!