犰狳'cor'功能返回标量

时间:2015-05-06 16:10:53

标签: c++ statistics armadillo

我正在尝试使用Armadillo计算双精度矢量的自相关,如下所示:

QVector<double> calculateAutocorrelation(QVector<double> samples){
  arma::Row<double> armadillo_samples(samples.toStdVector());//Convert samples to armadillo vector
  arma::Row<double> armadillo_autocorrelation = cor(armadillo_samples); //compute the autocorrelation, returns a 1x1 matrix!
  QVector<double> ret(samples.size());
  for(int i = 0; i <samples.size();i++)
      ret[i] = armadillo_autocorrelation(i);//copy back into a QVector
  return ret;
}

然而,如第二行所述,cor(armadillo_samples)返回1x1矩阵而不是另一个向量,正如我所料。  我从他们的网站(5.100.1)下载了最新的Armadillo稳定版本,并在启用了MKL的Linux上尝试了此代码,并在Windows上启用了预编译的BLAS / LAPACK库。
我误解了这个功能如何工作/使用它错了吗?

相关链接:
- Armadillo documentation of cor
- Wikipedia上的自相关(在犰狳文档中有一个指向Mathworld的链接,这也很有用,但我无法链接到它)

1 个答案:

答案 0 :(得分:1)

要在Armadillo中将1x1矩阵转换为纯标量,请使用as_scalar()函数。例如:

mat X(1,1, fill::ones);

double val = as_scalar(X);