[英]find k nearest neighbours for each element in a matrix in matlab
您好我在A,BI中有兩個矩陣要查找A矩陣的k個最近鄰居。我的Matlab代碼是:
A=[1 2 1;3 4 1;5 6 1;];
B=[11 12 2;13 4 2;15 16 2;17 18 2;1 2 2;3 4 2;5 6 2;];
[row,col]=size(A);
[row1,col1]=size(B);
dist=zeros(row,row1);
nnarray = zeros(row,row1);
k=5;
nnarray1 = zeros(row,k);
for i=1:row
for j=1:row1
dist(i,j)=sqrt(sum((A(i,:)-B(j,:)).^2));
end
[y,index]=sort(dist(i,:));
nnarray(i,:)=index';
end
nnarray的輸出矩陣為:// A矩陣的最近鄰居
5 6 7 2 1 3 4
6 5 7 2 1 3 4
7 6 5 2 1 3 4
在這里,對於矩陣A中的每個元素,輸出僅獲得一個NEAREST NEIGHBOR。 但是我想找到A中每個元素的5個最近鄰居,即A(1,1),A(1,2)等5個最近鄰居。
怎么做? 我應該在哪里修改代碼?
如果我正確理解了您的問題,則可以對代碼進行以下修改:
A=[1 2 1;3 4 1;5 6 1;];
B=[11 12 2;13 4 2;15 16 2;17 18 2;1 2 2;3 4 2;5 6 2;];
A = A(:);
B = B(:);
% ... the rest of your code
這將在B
中找到A
中每個元素的最近鄰居,其中A和B的元素現在按單列順序。
在這里,您編寫的代碼是正確的,但是可以在此處找到您修改的每個元素的代碼
for i=1:row
for j=1:row1
dist(i,j)=sqrt(sum((A(1,1)-B(j,:)).^2));
end
end
這樣你就可以泛化代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.