我有一个矩阵 A,由 200 个大小为 d 的向量组成。
我希望由 4096 个向量组成的矩阵 B 根据最近距离规则分类到这些点。
因此,结果应该包含大小为 B 的行,并具有其所属的 id 号(从 1 到 200)。
我通过 2 for
循环编写了这段代码,计算需要大量时间。
for i = 1:4096
counter = 1;
vector1 = FaceImage(i,:);
vector2 = Centroids(1,:);
distance = pdist( [ vector1 ; vector2] , 'euclidean' );
for j = 2:200
vector2 = Centroids(j,:);
temp = pdist( [ vector1 ; vector2] , 'euclidean' );
if temp < distance
distance = temp;
counter = j;
end
end
Histogram( i ) = counter;
end
有人可以帮助我提高上述代码的效率...或者建议我一个内置函数吗?
谢谢
最佳答案
您可以使用 pdist2
在一行中完成此操作:
[~, Histogram] = pdist2( Centroids, FaceImage, 'euclidian', 'Smallest', 1);
原始代码的时间:
FaceImage = rand(4096, 100);
Centroids = rand(200, 100);
tic
* your code *
toc
Elapsed time is 87.434877 seconds.
我的代码的时间:
tic
[~, Histogram_2] = pdist2( Centroids, FaceImage, 'euclidean', 'Smallest', 1);
toc
Elapsed time is 0.111736 seconds.
断言结果相同:
>> all(Histogram==Histogram_2)
ans =
1
关于performance - 根据欧氏距离对点进行分类 - 优化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862877/