簡體   English   中英

在matlab中為矩陣中的每個元素找到k個最近的鄰居

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM