在matlab中找到矩阵中每个元素的k个最近邻居

时间:2013-09-07 20:44:07

标签: matlab nearest-neighbor

我在A,B中有两个矩阵。我想找到一个矩阵的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的ouptut矩阵是: // 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个最近邻居。

怎么做? 我应该在哪里修改我的代码?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以对你的代码进行修改:

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

这将找到AB中每个元素的最近邻居,其中A和B的元素现在是单列顺序。

答案 1 :(得分:0)

这里您编写的代码是正确的,但要为您修改的每个元素找到每个代码 这里

for i=1:row
for j=1:row1
    dist(i,j)=sqrt(sum((A(1,1)-B(j,:)).^2));
end
end
像你那样概括你的代码