Remove for loop:从Matrix中提取包含所有实例之间距离的邻居距离

时间:2015-02-25 21:21:52

标签: matlab nearest-neighbor

我正在尝试创建N个数据点与其K个邻居之间的距离矩阵。数据矩阵为NxA,因此距离矩阵Y_distancesNxN,每个i,jth条目为数据点ij之间的距离。使用knnsearch我有一个每个数据点的行号矩阵及其K邻居名为IDX,然后我执行降维,并希望使用相邻点之间的距离低维空间。我目前正在使用for循环:

 no_neighbours=k;
 IDX = knnsearch(X,X,'K',no_neighbours);
 Y_Distances = sqrt(dist2(y, y));

for i = 1:N
    for j= 1:A
        Y_neighbour_distances = Y_Distances(i,IDX(i,j));
    end
end

有关如何避免这些循环的任何建议,因为它们在大型数据集上非常耗时。

1 个答案:

答案 0 :(得分:0)

你可能需要这个稀疏的调用:

I = ndgrid(1:N, 1:K);
sparse(I, IDX, Y_Distances)