Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 对两个向量的函数的向量化调用(处理矩阵作为向量的数组)

我希望计算向量集之间的累积余弦距离。
一组向量的自然表示是一个矩阵...但是如何向量化以下内容?

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中明显更快。



回答:

由于P1和P2的大小相同,因此您可以在此处进行按元素的操作。顺便说一下, v1'*v等于sum(v1.*v2) 。

d = prod(sum(P1.*P2,1)./sqrt(sum(P1.^2,1) .* sum(P2.^2,1)));

更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:56


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.