基于球体半径的数据聚类

计算科学 matlab 统计数据 数据分析
2021-12-21 13:20:41

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

1个回答

为了收集所需的 C 值,我将通过数据集(数组?)进行一次快速检查,以消除球体外的大部分点,然后(仅针对似乎符合条件的点)检查实际半径。

也就是说,对于一个候选点(x_i,y_i,z_i,c_i),测试:

1) Is x_i between X-r and X+r?
2) If so, is y_i between Y-r and Y+r?
3) If so, is z_i between Z-r and Z+r?

只有当所有三个测试都为真时,该点才有可能在所需的范围内。对于最终测试,使用预先计算的 r^2 并询问:

4) Is (x_i - X)^2 + (y_i - Y)^2 + (z_i - Z)^2 less than or equal r^2 ?

如果该点通过了最终测试,则将其包含c_i在您收集的 C 值中。