Euclidean distance between two structs for nearest neighbour
4 views (last 30 days)
Show older comments
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 Comments
Answers (1)
KSSV
on 9 Nov 2020
Edited: KSSV
on 9 Nov 2020
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 Comments
Jason Reed
on 11 Nov 2020
Ah, fair! Did he respond? I'm not exactly here because I figured this out haha
See Also
Categories
Find more on Pattern Recognition and Classification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!