【问题标题】:Armadillo 'cor' function returning scalar犰狳'cor'函数返回标量
【发布时间】:2015-08-26 13:06:33
【问题描述】:

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

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 和启用了预编译的 BLAS/LAPACK 库的 Windows 上尝试了此代码。
我是否误解了此功能的工作原理/使用错误?

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

【问题讨论】:

  • 犰狳文档中提到的 cor(X) 是自相关,它们可能仅表示零滞后自相关(并非所有滞后)。 (文档没有提到各种函数的返回类型;这对于编程文档来说似乎不寻常,但是哦。)我没有看到列出的全滞后自相关函数。你必须使用犰狳吗?也许你可以找到另一个库,或者自己编写它——自相关函数很容易用离散傅里叶变换表示。

标签: c++ statistics armadillo


【解决方案1】:

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

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

double val = as_scalar(X);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多