我正在 MATLAB 中基于欧几里德距离计算相似度矩阵。我的代码如下:
for i=1:N % M,N is the size of the matrix x for whose elements I am computing similarity matrix
for j=1:N
D(i,j) = sqrt(sum(x(:,i)-x(:,j)).^2)); % D is the similarity matrix
end
end
可以帮助优化这个 = 减少 for 循环作为我的矩阵x
是有维度的256x30000
.
多谢!
--Aditya
在 matlab 中执行此操作的函数称为 pdist。不幸的是,它速度慢得令人痛苦,并且没有考虑 Matlab 的矢量化能力。
以下是我为一个项目编写的代码。让我知道你获得了什么样的加速。
Qx=repmat(dot(x,x,2),1,size(x,1));
D=sqrt(Qx+Qx'-2*x*x');
但请注意,只有当您的数据点位于行中并且维度位于列中时,这才有效。例如,假设我有 256 个数据点和 100000 个维度,然后在我的 mac 上使用 x=rand(256,100000) ,上面的代码在大约半秒内生成一个 256x256 矩阵。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)