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!