我有一些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()
。
X2
是vec
,nbins
和int
。
我不确定是否理解错误:conv()
似乎没有vec
或uvec
作为参数,但在检查之后犰狳网站必须。
我尝试将uvec
转换为vec
,但它没有改变任何内容。
感谢您的帮助!
答案 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));
然后它奏效了!