python - 在c ++中是否有类似python的“corr”之类的函数来查找列的成对相关性?在使用 Armadillo/Mlpack 时?
问题描述
我需要获取此代码(Python)
corr = X.corr()
进入 C++,其中 X 是一个巨大的数据集,在我的情况下超过 10x10,接近 450x30。所以有很多列来计算相关性。我正在使用 C++ 和 Armadillo/Mlpack。
我在 stackoverflow 上找到了另一个解决方案,有人推荐使用
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++。正如文档将告诉您的那样,“矩阵上的矩阵”也可以返回各自的成对相关性。在这里,为简单起见,它只有两列。不出所料,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/stackoverflow/68749299/answer.cpp")
> set.seed(123)
> x <- rnorm(100)
> y <- rnorm(100)
> cor(x,y)
[1] -0.0495321
> mycorr(x,y)
[1] -0.0495321
>
推荐阅读
- python - Python:提取文本文件中两个字符串之间的值
- javascript - 将徽标放在导航栏上会影响导航栏上的整个文本
- ios - iPhone 11 上前置位置的默认 AVCaptureDevice 太“宽”
- android - Audio filnger 中的混音器线程是如何创建的,以及 app 和 audio flinger 混音器之间的映射是如何完成的?
- arrays - 线性代数可变自由度力向量的最佳和最有效格式?
- python - 如何将实例属性初始化为 numpy 数组?
- file - 使用 SharePlum for Sharepoint 下载文件
- linux - 如果匹配显示成功或失败,如何匹配文件中的语法
- javascript - 使用自动换行在 React 中渲染逗号分隔的链接
- c++ - 为什么我得到 nan 作为下面代码的输出?