我有以下代码,我将如何使用该函数简化它,因为它目前运行速度很慢,假设X
为10x7且Y
为4x7且D
为矩阵存储每对矢量之间的相关性。如果解决方案是使用xcorr2
函数,有人可以告诉我它是如何完成的吗?
for i = 1:4
for j = 1:10
D(j,i) = corr2(X(j,:),Y(i,:));
end
end
答案 0 :(得分:4)
使用pdist2
(统计工具箱)和'correlation'
选项。它比你的代码更快(即使预先分配),只需要一行:
D = 1-pdist2(X,Y,'correlation');
答案 1 :(得分:0)
我将如何做到这一点:
首先,存储/处理您的矩阵转置。这样可以更容易地使用相关函数。
现在假设您有矩阵X
和Y
,并希望获得列组合之间的相关性,这可以通过单个循环轻松实现:
X
corrcoef
一次确定与Y
的所有列的相关性。X
或者替换为此,您可以检查原始代码中的corr2
是否有corr
,xcorr
或corrcoef
,并查看哪一个运行得最快。< / p>
答案 2 :(得分:0)
使用corrcoef
,您可以在没有循环且不使用工具箱的情况下执行此操作:
D = corrcoef([X', Y']);
D = D(1 : size(X, 1), end - size(Y, 1) + 1 : end);
缺点是计算的系数多于必要的系数。
转置是必要的,因为你的矩阵不遵循Matlab约定来枚举带有第一个索引的样本和带有第二个索引的变量。