我有 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/