0

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

4

2 回答 2

2

这是一种使用简单欧几里得距离的解决方案:

V = [X Y Z C]是你的数据集, 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

好的C价值观是

 good = V(idx,4);  % // here I kept just the C column
于 2012-12-06T20:38:58.453 回答
0

这不是“聚类分析”:您不会尝试发现数据中的结构。

相反,您所做的通常称为“范围查询”或“半径查询”。在经典的数据库术语中,a SELECT,带有距离选择器。

您可能想使用欧几里得距离来定义您的球体。出于计算目的,它实际上是有益的,而不是平方欧几里得,只需取半径的平方。

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

我不知道 Matlab 有没有好的索引结构包。但总的来说,在 3D 中,这可以通过索引结构很好地加速。计算所有距离O(n),但仅使用索引结构O(log n)

于 2012-12-06T21:00:49.537 回答