我正在努力提高光学聚类算法的性能。我在开源中找到的实现对每个示例使用for循环,可以运行几个小时…
我相信当系统有足够的RAM时,repmat()函数的一些使用可能有助于提高其性能。
我们非常欢迎您提出改进实施的其他方法。
代码如下:
x是数据:一个[m x n]数组,其中m是样本大小,n是特征维数,大多数情况下显著大于1。
[m,n] = size(x);
for i = 1:m
D(i,:) = sum(((repmat(x(i,:),m,1)-x).^2),2).';
end
非常感谢。
最佳答案
有了足够的内存,您可以在这里使用一些方法。
方法1:withbsxfun
&permute
。-
D = squeeze(sum(bsxfun(@minus,permute(x,[3 2 1]),x).^2,2))
方法2:with
pdist
&squareform
。-D = squareform(pdist(x).^2)
3号进近,
matrix-multiplication based euclidean distance calculations
-xt = x.'; %//'
[m,n] = size(x);
D = [x.^2 ones(size(x)) -2*x ]*[ones(size(xt)) ; xt.^2 ; xt];
D(1:m+1:end) = 0;
为了表现,我赌的是接近3!