Euclidean distance between two structs for nearest neighbour
4 ビュー (過去 30 日間)
古いコメントを表示
Hi all,
I am trying to do nearest neighbour between a set of images and a nearest neighbour model. However in my euclidean distance function I am getting errors suh as "matrix dimensions must agree".
As you can see i've attemped different ways but what im trying to do for these two functions is:
• Calculate the Euclidean distance between the test sample and all the training samples d(𝑠𝑎𝑚𝑝𝑙𝑒1,𝑠𝑎𝑚𝑝𝑙𝑒2)=|𝑠𝑎𝑚𝑝𝑙𝑒1−𝑠𝑎𝑚𝑝𝑙𝑒2|=√(𝑠𝑎𝑚𝑝𝑙𝑒1(1)−𝑠𝑎𝑚𝑝𝑙𝑒2(1))2+ (𝑠𝑎𝑚𝑝𝑙𝑒1(2)−𝑠𝑎𝑚𝑝𝑙𝑒2(2))2+⋯+(𝑠𝑎𝑚𝑝𝑙𝑒1(𝑛)−𝑠𝑎𝑚𝑝𝑙𝑒2(𝑛))2
• Select the closest training example
• Assign the closest training example’s label to the test image
function dEuc = EuclideanDistance(sample1,sample2)
% dEuc = sqrt(sum((sample1 - sample2).^2));
% dEuc = norm(sample1 - sample2);
% for i = length(sample1)
% for j = length(sample2)
% num = sum((sample1(:) - sample2(:)).^2);
% end
% end
% dEuc = sqrt(num);
% sample1 = repmat(sample1,1,size(sample2,2));
% dEuc = sqrt(sum((sample1(:)-sample2(:)).^2));
V = sample1 - sample2;
dEuc = sqrt(V .* V');
end
function prediction = NNTesting(testImage,modelNN)
dataset = modelNN.neighbours;
prediction = EuclideanDistance(testImage, dataset);
end
0 件のコメント
回答 (1 件)
KSSV
2020 年 11 月 9 日
編集済み: KSSV
2020 年 11 月 9 日
dEuc = sqrt(V .* V');
Replace the above with
dEuc = sqrt(sum(V.^2));
%% Demo
A = rand(100,2) ; B = rand(100,2) ;
dx = A-B ;
d = sqrt(sum(dx.^2,2)) ;
% Formula
d1 = sqrt((A(:,1)-B(:,1)).^2+(A(:,2)-B(:,2)).^2) ;
isequal(d,d1)
You have to use sum with 1 or 2 depending on your data is row major or column major.
6 件のコメント
Jason Reed
2020 年 11 月 11 日
Ah, fair! Did he respond? I'm not exactly here because I figured this out haha
参考
カテゴリ
Help Center および File Exchange で Pattern Recognition and Classification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!