2012-12-06 71 views

回答

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 
+0

這工作!謝謝Acorbe。 – Cerberus

0

這不是「聚類分析」:你不要試圖發現結構在您的數據。

相反,您在做什麼,通常稱爲「範圍查詢」或「半徑查詢」。在經典的數據庫術語中,帶有距離選擇器的SELECT

您可能想要使用歐幾里德距離定義您的球體。出於計算目的,它實際上是有益的,而不是平方歐幾里得,通過簡單地取你的半徑的平方。

我沒有使用matlab,但必須有大量的例子來說明如何從查詢點計算數據集中每個實例的距離,然後選擇距離足夠小的對象。

我不知道是否有什麼好的索引結構包的for Matlab。但總的來說,在3D中,這可以通過索引結構加速。計算所有距離爲O(n),但只有索引結構O(log n)