rev*_*nge 4 matlab linear-algebra vectorization
我希望计算矢量集之间的累积余弦距离.
一组向量的自然表示是一个矩阵......但是如何对以下内容进行向量化?
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
Run Code Online (Sandbox Code Playgroud)
我当然可以写
fz = @(v1,v2) transpose(v1)*v2/(norm(v1)*norm(v2));
ds = cellfun(fz,P1,P2);
Run Code Online (Sandbox Code Playgroud)
...只要我将我的矩阵重铸为矢量的单元阵列.有更好/完全数字的方式吗?
此外,cellfun,arrayfun等会利用向量指令和/或多线程吗?
注意当前公司可能是多余的,但对于列向量而言v1'*v2 == dot(v1,v2),在Matlab中显着更快.
由于P1和P2大小相同,您可以在此处进行元素操作.顺便说一下,v1'*v等于sum(v1.*v2)
d = prod(sum(P1.*P2,1)./sqrt(sum(P1.^2,1) .* sum(P2.^2,1)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |