给出两组 - d维点.如何在Matlab中最有效地计算成对平方欧氏距离矩阵?
符号:
集合1由(numA,d)-matrix 给出A,集合2由(numB,d)-matrix 给出B.得到的距离矩阵应为格式(numA,numB).
示例点:
d = 4; % dimension
numA = 100; % number of set 1 points
numB = 200; % number of set 2 points
A = rand(numA,d); % set 1 given as matrix A
B = rand(numB,d); % set 2 given as matrix B
Run Code Online (Sandbox Code Playgroud) 我有一个大小为RGB的图像uint8(576,720,3),我想将每个像素分类为一组颜色.我已经使用rgb2labRGB 转换为LAB空间,然后删除了L层,因此它现在double(576,720,2)由AB组成.
现在,我想将其归类为我在另一幅图像上训练的一些颜色,并将它们各自的AB表示计算为:
Cluster 1: -17.7903 -13.1170
Cluster 2: -30.1957 40.3520
Cluster 3: -4.4608 47.2543
Cluster 4: 46.3738 36.5225
Cluster 5: 43.3134 -17.6443
Cluster 6: -0.9003 1.4042
Cluster 7: 7.3884 11.5584
Run Code Online (Sandbox Code Playgroud)
现在,为了将每个像素分类/标记到簇1-7,我目前执行以下操作(伪代码):
clusters;
for each x
for each y
ab = im(x,y,2:3);
dist = norm(ab - clusters); // norm of dist between ab and each cluster
[~, idx] = min(dist);
end
end
Run Code Online (Sandbox Code Playgroud)
然而,由于图像分辨率和我手动遍历每个x和y,这非常慢(52秒).
是否有一些我可以使用的内置函数执行相同的工作?必须有.
总结一下:我需要一种分类方法,将像素图像分类为已定义的一组聚类.
performance matlab classification machine-learning data-mining
BigList = rand(20, 3)
LittleList = rand(5, 3)
Run Code Online (Sandbox Code Playgroud)
我想为大列表中的每一行找到小列表中的"最近"行,由欧几里德范数定义(即k = 3维度中相应值之间的平方距离之和).
我可以看到如何使用两个循环来做到这一点,但似乎应该有一个更好的方法来使用内置矩阵操作来做到这一点.