Euclidean distance between two structs for nearest neighbour
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposte (1)
KSSV
il 9 Nov 2020
Modificato: KSSV
il 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 Commenti
Jason Reed
il 11 Nov 2020
Ah, fair! Did he respond? I'm not exactly here because I figured this out haha
Vedere anche
Categorie
Scopri di piรน su Pattern Recognition and Classification in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!