我使用kd-tree执行快速最近邻搜索查询。我使用以下代码生成kd树并对其执行查询:
% 3 dimensional vertex data
x = [1 2 2 1 2 5 6 3 4;
3 2 3 2 2 7 6 5 2;
1 2 9 9 7 5 8 9 3]';
% create the kd-tree
kdtree = createns(x, 'NSMethod', 'kdtree');
% perform a nearest neighbor search
nearestNeighborIndex = knnsearch(kdtree, [1 1 1]);
这在数据是静态时足够好。但是,每隔一段时间,我需要翻译kd树上的每个顶点。我知道更改整个数据意味着我需要重新生成整个树以再次执行最近邻居搜索。每个kd树有几千个顶点,从头开始重新生成整个树在我看来就像是一种过度杀伤,因为它花费了大量的时间。有没有办法翻译kd树而不从头开始重新生成它?我尝试访问和更改kd树的X属性(保存实际的顶点数据),但它似乎是只读的,即使它不是因为那里它也可能不起作用窗帘后面还有很多事情要发生。