如何利用指数矩阵从数据集中生成最近邻矩阵-matlab
我有一个数据点的如何利用指数矩阵从数据集中生成最近邻矩阵-matlab,matlab,Matlab,我有一个数据点的Nx2矩阵,其中每一行都是一个数据点。我还有一个NxK矩阵,它是K最近邻的索引,来自knnsearch函数。我试图创建一个矩阵,在每一行中包含数据点,然后是K个相邻数据点,即对于K=2,我们将为每一行创建类似[data1,neighbour1,neighbour2] 我一直在搞循环,试图用矩阵索引,但没有用,每个数据点都是1x2这一事实让我困惑。 我的最终目标是计算梯度,以类似的方式训练RBF网络: D = (x_dist - y_dist)./(y_dist+(y_dist==
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))';
您可以使用以下内容:
K = 2;
nearest = knnsearch(data, data, 'K', K+1);%// Gets point itself and K nearest ones
mat = reshape(data(nearest.',:).',[],N).'; %// Extracts the coordinates
我们生成数据(最近的',:)
以获得3*N×2
矩阵,其中每3个连续行是相互对应的点。我们将其转置,以将xy坐标移到同一列中。(MATLAB是列主键,即列中的值连续存储)。然后我们重塑数据,使每一列都包含最近的行的xy坐标。因此,我们最终只需要再次转置