两个矩阵行之间的相关系数

时间:2014-01-09 06:40:42

标签: matlab statistics distance

我有以下代码,我将如何使用该函数简化它,因为它目前运行速度很慢,假设X为10x7且Y为4x7且D为矩阵存储每对矢量之间的相关性。如果解决方案是使用xcorr2函数,有人可以告诉我它是如何完成的吗?

for i = 1:4
    for j = 1:10
        D(j,i) = corr2(X(j,:),Y(i,:));
    end
end

3 个答案:

答案 0 :(得分:4)

使用pdist2(统计工具箱)和'correlation'选项。它比你的代码更快(即使预先分配),只需要一行:

D = 1-pdist2(X,Y,'correlation');

答案 1 :(得分:0)

我将如何做到这一点:

首先,存储/处理您的矩阵转置。这样可以更容易地使用相关函数。

现在假设您有矩阵XY,并希望获得列组合之间的相关性,这可以通过单个循环轻松实现:

  1. X
  2. 的第一列
  3. 使用corrcoef一次确定与Y的所有列的相关性。
  4. 只要有一个,请选择下一列X

  5. 或者替换为此,您可以检查原始代码中的corr2是否有corrxcorrcorrcoef,并查看哪一个运行得最快。< / p>

答案 2 :(得分:0)

使用corrcoef,您可以在没有循环且不使用工具箱的情况下执行此操作:

D = corrcoef([X', Y']);
D = D(1 : size(X, 1), end - size(Y, 1) + 1 : end);

缺点是计算的系数多于必要的系数。

转置是必要的,因为你的矩阵不遵循Matlab约定来枚举带有第一个索引的样本和带有第二个索引的变量。