我希望计算向量集之间的累积余弦距离。
一组向量的自然表示是一个矩阵......但是我如何向量化以下内容?
function d = cosdist(P1,P2)
ds = zeros(size(P1,2),1);
for k=1:size(P1,2)
%#used transpose() to avoid SO formatting on '
ds(k)=transpose(P1(:,k))*P2(:,k)/(norm(P1(:,k))*norm(P2(:,k)));
end
d = prod(ds);
end
我当然可以写
fz = @(v1,v2) transpose(v1)*v2/(norm(v1)*norm(v2));
ds = cellfun(fz,P1,P2);
...只要我将矩阵重铸为向量的单元格数组。有没有更好/完全数字的方式?
此外,cellfun、arrayfun 等会利用向量指令和/或多线程吗?
注意在目前的公司中可能是多余的,但对于列向量v1'*v2 == dot(v1,v2)
并且在 Matlab 中明显更快。