MATLAB:2个向量中所有索引的快速相关计算

标签 matlab pearson-correlation

我有 2 个向量 A 和 B,每个向量的长度为 10,000。对于每个 ind=1:10000,我想计算 A(1:ind)B(1:ind) 的 Pearson 相关性>。当我在 for 循环中执行此操作时,会花费太多时间。 parfor 在我的机器上不能与超过 2 个 worker 一起工作。有没有办法快速执行此操作并将结果保存在向量 C 中(显然长度为 10,000,其中第一个元素为 NaN)?我找到了问题 Fast rolling correlation in Matlab ,但这与我需要的有点不同。

最佳答案

您可以使用此方法计算累积相关系数:

function result = cumcor(x,y)
    n = reshape(1:numel(x),size(x));
    sumx = cumsum(x);
    sumy = cumsum(y);
    sumx2 = cumsum(x.^2);
    sumy2 = cumsum(y.^2);
    sumxy = cumsum(x.*y);
    result = (n.*sumxy-sumx.*sumy)./(sqrt((sumx.^2-n.*sumx2).*(sumy.^2-n.*sumy2)));
end

关于MATLAB:2个向量中所有索引的快速相关计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139081/

相关文章:

python - 计算成对距离矩阵 : is a scalable, Python 中可用的大数据就绪方法?

c# - 性能数组乘法 Pearson

matlab - 将图像从 Matlab 传输到 OpenCV IplImage

matlab - 从 C 访问 MATLAB 的 unicode 字符串

matlab - 如何使用 Matlab 调整已填充的 netcdf 文件中数组的大小?

matlab - 从不同的用户帐户访问 MATLAB

java - 从 void 方法返回数组

python - PIL 逊相关系数和 nan 值

python - 当向其传递两组相同的数据时,自制的 pearson 相关实现返回 0.999...2