用matlab求距离r点x的所有邻域
我有一个n维点,想得到它的所有距离r的邻域 我知道matlab有rangesearch()来获得候选集中距离r的邻域,但在我的问题中,我没有候选集 有没有matlab代码可以做这项工作 谢谢用matlab求距离r点x的所有邻域,matlab,nearest-neighbor,Matlab,Nearest Neighbor,我有一个n维点,想得到它的所有距离r的邻域 我知道matlab有rangesearch()来获得候选集中距离r的邻域,但在我的问题中,我没有候选集 有没有matlab代码可以做这项工作 谢谢 我的意思是我想创建这个球内的点的子集。例如,我有一个点(3,1),半径r是5,所以我想找到距离点(3,1)5的r范围内的所有点。在这种情况下,增量将是1,这意味着可能的答案可能是点(4,1)、(3,2)、(5,1)…我说得清楚了吗?您可以使用ndgrid创建候选集。在二维示例中,需要一个间距为1的点栅格 x
我的意思是我想创建这个球内的点的子集。例如,我有一个点(3,1),半径r是5,所以我想找到距离点(3,1)5的r范围内的所有点。在这种情况下,增量将是1,这意味着可能的答案可能是点(4,1)、(3,2)、(5,1)…我说得清楚了吗?您可以使用
ndgrid
创建候选集。在二维示例中,需要一个间距为1的点栅格
xrange = -10:10;
yrange = -10:10;
[X, Y] = ndgrid(xrange, yrange);
这将生成两个点的二维矩阵。要将其转换为范围搜索所需的格式
:
candidate_set = [X(:), Y(:)];
然后,您可以调用rangesearch
,查找其中哪些在所选点的半径范围内:
test_pt = [3, 1];
radius = 5;
idx = rangesearch( candidate_set, test_pt, radius );
这将返回一个单元数组(每个测试点一个元素)。在您的例子中,您只有一个测试点,因此我们只对idx{1}
:
neighborhood = candidate_set(idx{1}, :);
还有一点需要注意:我们可以更聪明地生成候选集。我们知道邻域将以测试点为中心的超立方体为边界,因此我们可以从超立方体中的点作为候选集开始:
range_min = test_pt - radius;
range_max = test_pt + radius;
然后我们可以从这个范围构造一个候选集:
xrange = ceil(range_min(1)):floor(range_max(1));
yrange = ceil(range_min(2)):floor(range_max(2));
[X, Y] = ndgrid(xrange, yrange);
candidate_set = [X(:), Y(:)];
在任意数量的维度中:
nDims = length(test_pt);
grid_vecs = cell(nDims, 1);
grid_mats = cell(nDims, 1);
for ii = 1:nDims
grid_vecs{ii} = ceil(range_min(ii)):floor(range_max(ii));
end
[grid_mats{:}] = ndgrid(grid_vecs{:});
for ii = 1:nDims
grid_mats{ii} = grid_mats{ii}(:);
end
candidate_set = horzcat( grid_mats{:} );
邻域是以点为中心半径为r的球
rangesearch
返回球内给定点的子集。如果你没有一个候选集,你所说的“获取所有它的邻域”是什么意思?@user1877862我的意思是我想创建这个球内的点的子集。例如,我有一个点(3,1),半径r是5,所以我想找到距离点(3,1)5的r范围内的所有点。在这种情况下,增量将是1,这意味着可能的答案可能是第(4,1)、(3,2)、(5,1)点…我说得清楚吗?非常感谢!这正是我想要的!