我有一个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))';
答案 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坐标。所以我们最后只需要再次转置。