在 c++ 中是否有类似 python 中的 "corr" 的函数来查找列的成对相关性?在与 Armadillo/Mlpack 一起工作时?

Is there a function like "corr" from python, in c++ for finding the pairwise correlation of columns? Whilst working with Armadillo/Mlpack?

我需要获取此代码 (Python)


corr = X.corr()

进入 C++,其中 X 是一个巨大的数据集,在我的例子中超过 10x10,大约接近 450x30。所以有很多列来计算相关性。 我正在使用 C++ 和 Armadillo/Mlpack.

我在 Whosebug 上找到了另一个有人推荐使用的解决方案

arma::vec result = arma::conv(a, arma::reverse(a));

因为这应该与 MATLAB 中的 xcorr 相同,本质上与此相同? https://numpy.org/doc/stable/reference/generated/numpy.correlate.html

但我需要这个:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.corr.html

对于数据中的每个 #i 和 #i+1 列,是否可以选择 运行 在循环中执行“xcorr”解决方案?

或者有没有更好的方法在 C++ 中使用与“.corr”相同的方法?

提前致谢。

我最喜欢使用 R 中的犰狳,因此它被包装在 R 上下文中,尽管简单的示例函数是纯 C++。正如文档将告诉您的那样,'matrix on matrix' 也可以返回各自的成对相关性。在这里,为简单起见,它只是两列。不出所料,R 得到相同的数字:

代码(带R胶和例子)

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
double mycorr(const arma::vec & x, const arma::vec & y) {
    return arma::as_scalar(arma::cor(x, y));
}

/*** R
set.seed(123)
x <- rnorm(100)
y <- rnorm(100)
cor(x,y)
mycorr(x,y)
*/

输出(来自 R)

> Rcpp::sourceCpp("~/git/Whosebug/68749299/answer.cpp")

> set.seed(123)

> x <- rnorm(100)

> y <- rnorm(100)

> cor(x,y)
[1] -0.0495321

> mycorr(x,y)
[1] -0.0495321
>