【发布时间】:2011-11-09 22:48:09
【问题描述】:
laListe={{{{10, 17}, 1}, {{33, 12}, 1}, {{32, 17}, 1}, {{9, 10},1},
{{22, 24}, 1},{{27, 6}, 2}, {{25, 13}, 2}, {{30, 9}, 2}},
{{{14, 12}, 1},{{19, 17}, 1}, {{7, 21}, 1}, {{7, 24},1},
{{27, 19}, 1}, {{12, 16}, 2}, {{13, 20}, 2}, {{20, 22}, 2}}}
FrameXYs = {{4.32, 3.23}, {35.68, 26.75}}
Row[Function[compNo,
Graphics[{White, EdgeForm[Thick],
Rectangle @@ FrameXYs,
Black,
Disk[Sequence @@ laListe[[compNo, #]]] & /@
Range[Length@laListe[[compNo]]]}, ImageSize -> 300]] /@
{1, 2}]
我想找到一种方法来聚集这些磁盘,因为它们彼此靠近。 Mathematica 是否有内置功能来做这样的事情?
编辑
当我尝试 FindClusters 时,我遇到了一些不便:
与:
list1={{{24.413, 6.5978}, {7.68887, 7.2147}, {29.357, 13.2822},
{6.22436, 9.7145}, {22.7162, 17.7198}, {13.6851, 5.7635},
{18.8062, 12.9946}, {8.04889, 16.7414}}}
FindClusters 是否会破坏小数:
FindClusters[Flatten[list1,1]]
出来:
{{{{24.413, 6.5978}, {7.68887, 7.2147}, {29.357, 13.2822},
{6.22436,9.7145}, {22.7162, 17.7198}, {13.6851, 5.7635},
{18.8062,12.9946}, {8.04889, 16.7414}}}}
而:
FindClusters[Flatten[Round[list1], 1]]
输出:
{{{24, 7}, {29, 13}, {23, 18}, {14, 6}, {19, 13}},
{{8, 7}, {6, 10}, {8, 17}}}
然后,为了做到这一点,我必须摆脱对我来说很重要的视觉集群的磁盘直径。 然后我想捕捉对齐。当 5 个磁盘未分组但对齐时。当我在一些作品上对其进行测试时,它并没有找到这样的作品。
我正在尝试使用以下方法“Pointize”磁盘:
pointize[{{x_,y_},r_},size_:12] :=
Table[{x+r Cos[i ((2\[Pi])/size)],
y+r Sin[i ((2\[Pi])/size)]},{i,0,size}]
我最初用它来计算这些磁盘的 ConvexHullArea。我觉得它可以帮助我考虑半径的需要,但是实现起来很棘手,我什至不确定它是否相关
另外,我希望这只是小数问题,但我不能这样使用 FindClusters[list],而是必须给它我想要 FindClusters[list,3] 的集群数,而我想要的是相同的算法可以在不同的组成上找到不同的簇数。
您会考虑使用 FindClusters 进行特定设置和/或距离函数吗?
编辑
感谢这里的专家,我发现了一些有趣的东西。只是一个想法,我需要找到一种方法来量化它并将新图像以矩阵形式左右使用。
comp1 = Graphics[{White, Rectangle @@ FrameXYs, Black,
Disk[Sequence @@ laListe[[1, #]]] & /@ Range[Length@laListe[[1]]]},
ImageSize -> 300]
Binarize[ImageCorrelate[comp1, GaussianMatrix[40]], .95]
【问题讨论】:
-
我不明白为什么你必须去掉气泡直径——它实际上是你的三维,不是吗?此外,您不必指定要查找的集群数量。您对高斯 blob 的最新编辑很酷,但我认为这是一个单独的问题。
-
Verbeia,我想我对 find clusters 不够敏捷,我以为我不能在其中包含我的第三维(半径),我会更加努力。
标签: wolfram-mathematica cluster-analysis