Matlab中基于查询点距离的数据选择

Matlab中基于查询点距离的数据选择,matlab,statistics,Matlab,Statistics,我有一个数据集,它有四列[xyzc]。我想找出给定球体中以[X,Y,Z]为中心,半径为r的所有C值。解决这个问题的最佳方法是什么?我应该使用clusterdata命令吗?这里有一个使用朴素欧几里德距离的解决方案: 假设V=[xyzc]是您的数据集,Center=[X,Y,Z]是球体的中心,然后 dist = bsxfun(@minus,V(:,1:3),Center); % // finds the distance vectors

我有一个数据集,它有四列[xyzc]。我想找出给定球体中以[X,Y,Z]为中心,半径为r的所有C值。解决这个问题的最佳方法是什么?我应该使用clusterdata命令吗?

这里有一个使用朴素欧几里德距离的解决方案:

假设
V=[xyzc]
是您的数据集,
Center=[X,Y,Z]
是球体的中心,然后

dist = bsxfun(@minus,V(:,1:3),Center);  % // finds the distance vectors 
                                        % // between the points and the center
dist = sum(dist.^2,2); % // evaluate the squares of the euclidean distances (scalars)
idx = (dist < r^2);    % // Find the indexes of the matching points
这不是“聚类分析”:您不会试图发现数据中的结构

相反,您所做的通常称为“范围查询”或“半径查询”。在传统的数据库术语中,使用距离选择器选择

您可能希望使用欧几里德距离定义球体。为了计算的目的,它实际上是有益的,而不是平方欧几里德,通过简单地采取你的半径平方

我不使用matlab,但必须有大量的示例,说明如何计算数据集中每个实例与查询点之间的距离,然后选择距离足够小的对象

我不知道是否有适合Matlab的索引结构包。但一般来说,在3D上,索引结构可以很好地加速这一过程。计算所有距离都是
O(n)
,但只有索引结构
O(logn)

 good = V(idx,4);  % // here I kept just the C column