Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用matlab求距离r点x的所有邻域_Matlab_Nearest Neighbor - Fatal编程技术网

用matlab求距离r点x的所有邻域

用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

我有一个n维点,想得到它的所有距离r的邻域

我知道matlab有rangesearch()来获得候选集中距离r的邻域,但在我的问题中,我没有候选集

有没有matlab代码可以做这项工作

谢谢


我的意思是我想创建这个球内的点的子集。例如,我有一个点(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)点…我说得清楚吗?非常感谢!这正是我想要的!