快速计算(n×d×t)矩阵中点之间的成对余弦方向距离

时间:2012-04-21 20:08:50

标签: performance matlab distance cosine-similarity

我知道Matlab中的pdist(X,distance)采用(nxd)点矩阵并计算它们之间的成对距离。我也知道如果矩阵包含向量而不是点,它还有额外的选项来计算余弦距离。

我想做的是采用(nxdxt)矩阵,该矩阵保持样本随时间t的变化位置,并有效/快速地计算所有对/所有帧之间的余弦方向距离,其中定义了av(t)作为由p(t + 1) - p(t)计算的方向,而p(t)指的是行M(p,:,t)。

显然,如果有所帮助,我不想使用循环。有什么建议吗?

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

回想一下,余弦距离与归一化向量之间的欧几里德距离的两倍相同。这使我们无法在余弦距离函数中反复计算范数。

听起来你想要矢量差异与每次时间变化之间的距离。这是对的吗?

data = diff(data,1,3);
[m,n,nt] = size(data);
data = reshape(data,m*nt,n);
data = data./repmat(sqrt(sum(data.^2,2)),1,n);
d = pdist(data);
d = d/2; %# The uniform scaling may not matter to you.