【发布时间】:2017-01-11 17:59:44
【问题描述】:
我有一些 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");
当我尝试编译时,我收到以下错误:“no matching function for call to 'conv(arma::uvec&,arma::vec&,int)'”。
hist2 之前已使用hist() 函数定义为uvec。
X2 是 vec 和 nbins 是 int。
我不确定是否理解错误:似乎conv() 没有将vec 或uvec 作为参数,但在检查了犰狳网站后它必须这样做。
我尝试将uvec 转换为vec,但没有任何改变。
感谢您的帮助!
【问题讨论】:
-
"same" 不是 int。
-
我太专注于我的向量,以至于我没有注意到“int”部分。我不明白为什么'same'会是一个int。我尝试输入与示例中的文档相同的“相同”,但它仍然不起作用。错误是'没有匹配函数调用'conv(arma::uvec&,arma::vec&,const char [5])'
-
@RomainMartin - 您可能使用的是旧版本的犰狳,它没有最新的
conv()功能。删除之前的版本,安装latest版本。 -
@mtall - 事实是我已经拥有最新版本 7.600.2 :/ 是否可能没有正确安装?这会很奇怪,因为我可以毫无问题地使用其他功能。可能是因为我没有使用 C++11 标准?
-
事实上我尝试了网站的例子,我得到另一个错误:'未定义引用'wrapper_ddot_'。我认为 Armadillo 所需的某些软件包尚未正确安装或链接。我会这样看。