我正在努力提高光学聚类算法的性能。我在开源中找到的实现对每个示例使用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:withpdist&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!

10-07 19:38