如何使用索引矩阵从数据集创建最近邻居矩阵 - matlab

时间:2015-02-22 04:48:45

标签: matlab

我有一个Nx2数据点矩阵,其中每一行都是一个数据点。我还有一个NxK索引矩阵,其K函数的最近邻居knnsearch。我正在尝试创建一个矩阵,在每一行中包含数据点,后跟K个相邻数据点,即对于K = 2我们每行会有[data1, neighbour1, neighbour2]

我一直在乱循环并尝试使用矩阵进行索引,但无济于事,每个数据点都是1x2的事实令我感到困惑。 我的最终目标是计算梯度,以类似的方式训练RBF网络:

D = (x_dist - y_dist)./(y_dist+(y_dist==0));
temp = y';
neg_gradient = -2.*sum(kron(D, ones(1,2)) .* ...
    (repmat(y, 1, ndata) - repmat((temp(:))', ndata, 1)), 1);
neg_gradient = (reshape(neg_gradient, net.nout, ndata))';

1 个答案:

答案 0 :(得分:0)

你可以沿着这些方向使用:

K = 2;
nearest = knnsearch(data, data, 'K', K+1);%// Gets point itself and K nearest ones
mat = reshape(data(nearest.',:).',[],N).'; %// Extracts the coordinates

我们生成data(nearest.',:)以获得3*N-by-2矩阵,其中每3个连续行是彼此对应的点。我们将它转​​换为将xy坐标放入同一列。 (MATLAB是列专业,即列中的值连续存储)。然后我们重新整形数据,因此每列都包含nearest行的xy坐标。所以我们最后只需要再次转置。