找出点簇的质心


27

在网上搜索时,经常会找到用于查找多边形质心的解决方案。我感兴趣的是找到点簇的质心。加权平均值。如果有人可以提供一些指针,伪代码(甚至更好的是,R包已经解决了这个问题)或如何解决此问题的链接,我将不胜感激。

编辑

融合已经开始(再次)。iant提出了一种平均坐标并将其用于质心的方法。当我在此网页上看到正确的图片时,正是我的想法。

这是一些简单的R代码,用于绘制下图来说明这一点(×是质心):

xcor <- rchisq(10, 3, 2)
ycor <- runif(10, min = 1, max = 100)
mx <- mean(xcor)
my <- mean(ycor)

plot(xcor, ycor, pch = 1)
points(mx, my, pch = 3)

在此处输入图片说明

编辑2

cluster::pam()$medoids返回一组聚类的medoid。这是@Joris Meys无耻地偷来的一个例子:

library(cluster)
df <- data.frame(X = rnorm(100, 0), Y = rpois(100, 2))
plot(df$X, df$Y)
points(pam(df, 1)$medoids, pch = 16, col = "red")

1
点的平均中心或最小距离中心不够吗?
安迪W

1
@罗马:图形不正确:您需要使用均值,而不是中位数。对于2D空间点云,有一个中位中心的类似物,但这不是其中之一(因为它与坐标有关):有关讨论,请参阅stats.stackexchange.com/q/1927/919
ub

1
我还建议您查看Crimestat工作簿的第4章icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf。这是一个非常柔和的介绍,描述并以图形方式显示了为什么更高维度的中位数没有唯一的解决方案,并描述了集中趋势和空间点模式方差的其他度量。
安迪W

这变得越来越有趣。谢谢您的回答。我正在调查这件事。
RomanLuštrik2011年

2
“建议了一种平均坐标的方法,并将其用于质心。” 实际上,这是质心的定义,不仅仅是简单的近似。
科林K

Answers:


43

只需对X和Y坐标取平均值(如果需要,乘以权重)即可得到质心。


4
+1很棒的解决方案。它也延伸到椭球体上的质心(这对于避免将点分布在地球的大部分上时避免与投影相关的变形是必不可少的):首先将(lat,lon)转换为3D(x,y,z)(地心坐标),对它们求平均值,然后将结果转换回(纬度,经度)(忽略了3D平均值几乎深于表面以下的几乎不可避免的事实)。
whuber

我已经更新了我的问题,以反映您的回答。
RomanLuštrik2011年

1

您可以使用geosphere软件包中的质心功能。

https://www.rdocumentation.org/packages/geosphere/versions/1.5-5/topics/centroid


欢迎使用GIS StackExchange,感谢您提交答案。请花一点时间回顾一下巡回赛,以了解我们重点关注的问答形式。请修改您的答案以包含更多详细信息,因为我们通常在寻找更长的答案(而不是1-2句),以帮助原始海报或未来的搜索者。您可以做的一种修改是包含您认为此工具会有所帮助的原因或代码段/屏幕截图。
打枪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.